{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "c3087360",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import torch.nn as nn\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import scipy.io\n",
    "# Define the coRNNCell\n",
    "class coRNNCell(nn.Module):\n",
    "    def __init__(self, n_inp, n_hid, dt, gamma, epsilon):\n",
    "        super(coRNNCell, self).__init__()\n",
    "        self.dt = dt\n",
    "        self.gamma = gamma\n",
    "        self.epsilon = epsilon\n",
    "        self.i2h = nn.Linear(n_inp + n_hid + n_hid, n_hid)\n",
    "\n",
    "    def forward(self, x, hy, hz):\n",
    "        hz = hz + self.dt * (torch.tanh(self.i2h(torch.cat((x, hz, hy), 1)))\n",
    "                             - self.gamma * hy - self.epsilon * hz)\n",
    "        hy = hy + self.dt * hz\n",
    "\n",
    "        return hy, hz\n",
    "\n",
    "# Define the coRNN model\n",
    "class coRNN(nn.Module):\n",
    "    def __init__(self, n_inp, n_hid, n_out, dt, gamma, epsilon):\n",
    "        super(coRNN, self).__init__()\n",
    "        self.n_hid = n_hid\n",
    "        self.cell = coRNNCell(n_inp, n_hid, dt, gamma, epsilon)\n",
    "        self.readout = nn.Linear(n_hid, n_out)\n",
    "\n",
    "    def forward(self, x):\n",
    "        hy = torch.zeros(x.size(1), self.n_hid)\n",
    "        hz = torch.zeros(x.size(1), self.n_hid)\n",
    "\n",
    "        for t in range(x.size(0)):\n",
    "            hy, hz = self.cell(x[t], hy, hz)\n",
    "        output = self.readout(hy)\n",
    "\n",
    "        return output\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d5f77619",
   "metadata": {},
   "source": [
    "### PINN data importing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "5d6cfa8b",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Load the .mat file\n",
    "mat_data = scipy.io.loadmat('burg.mat')\n",
    "\n",
    "# Access the variables stored in the .mat file\n",
    "# The variable names in the .mat file become keys in the loaded dictionary\n",
    "x = mat_data['x']\n",
    "t = mat_data['t']\n",
    "u = mat_data['u1']\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0082d614",
   "metadata": {},
   "source": [
    "### Exact Solution data importing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "10519e4e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "x size (256, 1)\n",
      "t size (100, 1)\n",
      "u size (256, 100)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x360 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# importing data\n",
    "\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import numpy as np\n",
    "import time\n",
    "import scipy.io\n",
    "\n",
    "# Load the .mat file\n",
    "mat_data = scipy.io.loadmat('burgers_shock.mat')\n",
    "\n",
    "# Access the variables stored in the .mat file\n",
    "# The variable names in the .mat file become keys in the loaded dictionary\n",
    "x = mat_data['x']\n",
    "t = mat_data['t']\n",
    "u_1 = mat_data['usol']\n",
    "\n",
    "#Use the loaded variables as needed\n",
    "print(\"x size\", x.shape)\n",
    "print(\"t size\", t.shape)\n",
    "print(\"u size\", u.shape)\n",
    "\n",
    "X, T = np.meshgrid(x, t)\n",
    "# Define custom color levels\n",
    "c_levels = np.linspace(np.min(u_1), np.max(u_1), 100)\n",
    "\n",
    "# Plot the contour\n",
    "plt.figure(figsize=(15, 5))\n",
    "plt.contourf(T, X, u_1.T, levels=c_levels, cmap='coolwarm')\n",
    "plt.xlabel('t')\n",
    "plt.ylabel('x')\n",
    "plt.title('Burgers')\n",
    "plt.colorbar()  # Add a colorbar for the contour levels\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "08861d5f",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/data/localhome/tkapoor/.local/lib/python3.8/site-packages/torch/nn/modules/loss.py:520: UserWarning: Using a target size (torch.Size([1, 79, 256])) that is different to the input size (torch.Size([79, 256])). This will likely lead to incorrect results due to broadcasting. Please ensure they have the same size.\n",
      "  return F.mse_loss(input, target, reduction=self.reduction)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 10/20000, Loss: 0.41938713\n",
      "Epoch: 20/20000, Loss: 0.40403131\n",
      "Epoch: 30/20000, Loss: 0.38934624\n",
      "Epoch: 40/20000, Loss: 0.37519515\n",
      "Epoch: 50/20000, Loss: 0.36156699\n",
      "Epoch: 60/20000, Loss: 0.34844378\n",
      "Epoch: 70/20000, Loss: 0.33580169\n",
      "Epoch: 80/20000, Loss: 0.32361725\n",
      "Epoch: 90/20000, Loss: 0.31186906\n",
      "Epoch: 100/20000, Loss: 0.30053818\n",
      "Epoch: 110/20000, Loss: 0.28960770\n",
      "Epoch: 120/20000, Loss: 0.27906236\n",
      "Epoch: 130/20000, Loss: 0.26888829\n",
      "Epoch: 140/20000, Loss: 0.25907257\n",
      "Epoch: 150/20000, Loss: 0.24960320\n",
      "Epoch: 160/20000, Loss: 0.24046889\n",
      "Epoch: 170/20000, Loss: 0.23165882\n",
      "Epoch: 180/20000, Loss: 0.22316267\n",
      "Epoch: 190/20000, Loss: 0.21497065\n",
      "Epoch: 200/20000, Loss: 0.20707317\n",
      "Epoch: 210/20000, Loss: 0.19946103\n",
      "Epoch: 220/20000, Loss: 0.19212537\n",
      "Epoch: 230/20000, Loss: 0.18505748\n",
      "Epoch: 240/20000, Loss: 0.17824908\n",
      "Epoch: 250/20000, Loss: 0.17169201\n",
      "Epoch: 260/20000, Loss: 0.16537838\n",
      "Epoch: 270/20000, Loss: 0.15930052\n",
      "Epoch: 280/20000, Loss: 0.15345094\n",
      "Epoch: 290/20000, Loss: 0.14782245\n",
      "Epoch: 300/20000, Loss: 0.14240798\n",
      "Epoch: 310/20000, Loss: 0.13720070\n",
      "Epoch: 320/20000, Loss: 0.13219395\n",
      "Epoch: 330/20000, Loss: 0.12738122\n",
      "Epoch: 340/20000, Loss: 0.12275621\n",
      "Epoch: 350/20000, Loss: 0.11831282\n",
      "Epoch: 360/20000, Loss: 0.11404507\n",
      "Epoch: 370/20000, Loss: 0.10994714\n",
      "Epoch: 380/20000, Loss: 0.10601339\n",
      "Epoch: 390/20000, Loss: 0.10223833\n",
      "Epoch: 400/20000, Loss: 0.09861659\n",
      "Epoch: 410/20000, Loss: 0.09514298\n",
      "Epoch: 420/20000, Loss: 0.09181242\n",
      "Epoch: 430/20000, Loss: 0.08862001\n",
      "Epoch: 440/20000, Loss: 0.08556091\n",
      "Epoch: 450/20000, Loss: 0.08263049\n",
      "Epoch: 460/20000, Loss: 0.07982422\n",
      "Epoch: 470/20000, Loss: 0.07713766\n",
      "Epoch: 480/20000, Loss: 0.07456654\n",
      "Epoch: 490/20000, Loss: 0.07210670\n",
      "Epoch: 500/20000, Loss: 0.06975408\n",
      "Epoch: 510/20000, Loss: 0.06750473\n",
      "Epoch: 520/20000, Loss: 0.06535484\n",
      "Epoch: 530/20000, Loss: 0.06330071\n",
      "Epoch: 540/20000, Loss: 0.06133870\n",
      "Epoch: 550/20000, Loss: 0.05946534\n",
      "Epoch: 560/20000, Loss: 0.05767723\n",
      "Epoch: 570/20000, Loss: 0.05597106\n",
      "Epoch: 580/20000, Loss: 0.05434364\n",
      "Epoch: 590/20000, Loss: 0.05279190\n",
      "Epoch: 600/20000, Loss: 0.05131280\n",
      "Epoch: 610/20000, Loss: 0.04990346\n",
      "Epoch: 620/20000, Loss: 0.04856105\n",
      "Epoch: 630/20000, Loss: 0.04728285\n",
      "Epoch: 640/20000, Loss: 0.04606622\n",
      "Epoch: 650/20000, Loss: 0.04490861\n",
      "Epoch: 660/20000, Loss: 0.04380754\n",
      "Epoch: 670/20000, Loss: 0.04276066\n",
      "Epoch: 680/20000, Loss: 0.04176563\n",
      "Epoch: 690/20000, Loss: 0.04082024\n",
      "Epoch: 700/20000, Loss: 0.03992234\n",
      "Epoch: 710/20000, Loss: 0.03906985\n",
      "Epoch: 720/20000, Loss: 0.03826078\n",
      "Epoch: 730/20000, Loss: 0.03749321\n",
      "Epoch: 740/20000, Loss: 0.03676526\n",
      "Epoch: 750/20000, Loss: 0.03607516\n",
      "Epoch: 760/20000, Loss: 0.03542117\n",
      "Epoch: 770/20000, Loss: 0.03480164\n",
      "Epoch: 780/20000, Loss: 0.03421498\n",
      "Epoch: 790/20000, Loss: 0.03365964\n",
      "Epoch: 800/20000, Loss: 0.03313416\n",
      "Epoch: 810/20000, Loss: 0.03263711\n",
      "Epoch: 820/20000, Loss: 0.03216715\n",
      "Epoch: 830/20000, Loss: 0.03172295\n",
      "Epoch: 840/20000, Loss: 0.03130327\n",
      "Epoch: 850/20000, Loss: 0.03090690\n",
      "Epoch: 860/20000, Loss: 0.03053270\n",
      "Epoch: 870/20000, Loss: 0.03017955\n",
      "Epoch: 880/20000, Loss: 0.02984641\n",
      "Epoch: 890/20000, Loss: 0.02953226\n",
      "Epoch: 900/20000, Loss: 0.02923614\n",
      "Epoch: 910/20000, Loss: 0.02895710\n",
      "Epoch: 920/20000, Loss: 0.02869429\n",
      "Epoch: 930/20000, Loss: 0.02844683\n",
      "Epoch: 940/20000, Loss: 0.02821393\n",
      "Epoch: 950/20000, Loss: 0.02799483\n",
      "Epoch: 960/20000, Loss: 0.02778878\n",
      "Epoch: 970/20000, Loss: 0.02759508\n",
      "Epoch: 980/20000, Loss: 0.02741306\n",
      "Epoch: 990/20000, Loss: 0.02724209\n",
      "Epoch: 1000/20000, Loss: 0.02708156\n",
      "Epoch: 1010/20000, Loss: 0.02693089\n",
      "Epoch: 1020/20000, Loss: 0.02678952\n",
      "Epoch: 1030/20000, Loss: 0.02665695\n",
      "Epoch: 1040/20000, Loss: 0.02653267\n",
      "Epoch: 1050/20000, Loss: 0.02641622\n",
      "Epoch: 1060/20000, Loss: 0.02630713\n",
      "Epoch: 1070/20000, Loss: 0.02620499\n",
      "Epoch: 1080/20000, Loss: 0.02610939\n",
      "Epoch: 1090/20000, Loss: 0.02601996\n",
      "Epoch: 1100/20000, Loss: 0.02593632\n",
      "Epoch: 1110/20000, Loss: 0.02585813\n",
      "Epoch: 1120/20000, Loss: 0.02578507\n",
      "Epoch: 1130/20000, Loss: 0.02571682\n",
      "Epoch: 1140/20000, Loss: 0.02565311\n",
      "Epoch: 1150/20000, Loss: 0.02559364\n",
      "Epoch: 1160/20000, Loss: 0.02553816\n",
      "Epoch: 1170/20000, Loss: 0.02548642\n",
      "Epoch: 1180/20000, Loss: 0.02543819\n",
      "Epoch: 1190/20000, Loss: 0.02539325\n",
      "Epoch: 1200/20000, Loss: 0.02535138\n",
      "Epoch: 1210/20000, Loss: 0.02531240\n",
      "Epoch: 1220/20000, Loss: 0.02527612\n",
      "Epoch: 1230/20000, Loss: 0.02524235\n",
      "Epoch: 1240/20000, Loss: 0.02521094\n",
      "Epoch: 1250/20000, Loss: 0.02518173\n",
      "Epoch: 1260/20000, Loss: 0.02515456\n",
      "Epoch: 1270/20000, Loss: 0.02512930\n",
      "Epoch: 1280/20000, Loss: 0.02510581\n",
      "Epoch: 1290/20000, Loss: 0.02508396\n",
      "Epoch: 1300/20000, Loss: 0.02506359\n",
      "Epoch: 1310/20000, Loss: 0.02504457\n",
      "Epoch: 1320/20000, Loss: 0.02502664\n",
      "Epoch: 1330/20000, Loss: 0.02500914\n",
      "Epoch: 1340/20000, Loss: 0.02497526\n",
      "Epoch: 1350/20000, Loss: 0.02477605\n",
      "Epoch: 1360/20000, Loss: 0.02443558\n",
      "Epoch: 1370/20000, Loss: 0.02407821\n",
      "Epoch: 1380/20000, Loss: 0.02385366\n",
      "Epoch: 1390/20000, Loss: 0.02362491\n",
      "Epoch: 1400/20000, Loss: 0.02332579\n",
      "Epoch: 1410/20000, Loss: 0.02302927\n",
      "Epoch: 1420/20000, Loss: 0.02277381\n",
      "Epoch: 1430/20000, Loss: 0.02255094\n",
      "Epoch: 1440/20000, Loss: 0.02234370\n",
      "Epoch: 1450/20000, Loss: 0.02214261\n",
      "Epoch: 1460/20000, Loss: 0.02194750\n",
      "Epoch: 1470/20000, Loss: 0.02175985\n",
      "Epoch: 1480/20000, Loss: 0.02157934\n",
      "Epoch: 1490/20000, Loss: 0.02140499\n",
      "Epoch: 1500/20000, Loss: 0.02123583\n",
      "Epoch: 1510/20000, Loss: 0.02107119\n",
      "Epoch: 1520/20000, Loss: 0.02091060\n",
      "Epoch: 1530/20000, Loss: 0.02075361\n",
      "Epoch: 1540/20000, Loss: 0.02059984\n",
      "Epoch: 1550/20000, Loss: 0.02044894\n",
      "Epoch: 1560/20000, Loss: 0.02030057\n",
      "Epoch: 1570/20000, Loss: 0.02015443\n",
      "Epoch: 1580/20000, Loss: 0.02001027\n",
      "Epoch: 1590/20000, Loss: 0.01986785\n",
      "Epoch: 1600/20000, Loss: 0.01972696\n",
      "Epoch: 1610/20000, Loss: 0.01958744\n",
      "Epoch: 1620/20000, Loss: 0.01944913\n",
      "Epoch: 1630/20000, Loss: 0.01931193\n",
      "Epoch: 1640/20000, Loss: 0.01917576\n",
      "Epoch: 1650/20000, Loss: 0.01904056\n",
      "Epoch: 1660/20000, Loss: 0.01890628\n",
      "Epoch: 1670/20000, Loss: 0.01877291\n",
      "Epoch: 1680/20000, Loss: 0.01864041\n",
      "Epoch: 1690/20000, Loss: 0.01850879\n",
      "Epoch: 1700/20000, Loss: 0.01837803\n",
      "Epoch: 1710/20000, Loss: 0.01824814\n",
      "Epoch: 1720/20000, Loss: 0.01811910\n",
      "Epoch: 1730/20000, Loss: 0.01799092\n",
      "Epoch: 1740/20000, Loss: 0.01786360\n",
      "Epoch: 1750/20000, Loss: 0.01773714\n",
      "Epoch: 1760/20000, Loss: 0.01761153\n",
      "Epoch: 1770/20000, Loss: 0.01748678\n",
      "Epoch: 1780/20000, Loss: 0.01736285\n",
      "Epoch: 1790/20000, Loss: 0.01723976\n",
      "Epoch: 1800/20000, Loss: 0.01711747\n",
      "Epoch: 1810/20000, Loss: 0.01699599\n",
      "Epoch: 1820/20000, Loss: 0.01687529\n",
      "Epoch: 1830/20000, Loss: 0.01675537\n",
      "Epoch: 1840/20000, Loss: 0.01663621\n",
      "Epoch: 1850/20000, Loss: 0.01651781\n",
      "Epoch: 1860/20000, Loss: 0.01640016\n",
      "Epoch: 1870/20000, Loss: 0.01628326\n",
      "Epoch: 1880/20000, Loss: 0.01616709\n",
      "Epoch: 1890/20000, Loss: 0.01605166\n",
      "Epoch: 1900/20000, Loss: 0.01593697\n",
      "Epoch: 1910/20000, Loss: 0.01582300\n",
      "Epoch: 1920/20000, Loss: 0.01570975\n",
      "Epoch: 1930/20000, Loss: 0.01559722\n",
      "Epoch: 1940/20000, Loss: 0.01548541\n",
      "Epoch: 1950/20000, Loss: 0.01537431\n",
      "Epoch: 1960/20000, Loss: 0.01526392\n",
      "Epoch: 1970/20000, Loss: 0.01515423\n",
      "Epoch: 1980/20000, Loss: 0.01504524\n",
      "Epoch: 1990/20000, Loss: 0.01493694\n",
      "Epoch: 2000/20000, Loss: 0.01482933\n",
      "Epoch: 2010/20000, Loss: 0.01472239\n",
      "Epoch: 2020/20000, Loss: 0.01461613\n",
      "Epoch: 2030/20000, Loss: 0.01451053\n",
      "Epoch: 2040/20000, Loss: 0.01440557\n",
      "Epoch: 2050/20000, Loss: 0.01430126\n",
      "Epoch: 2060/20000, Loss: 0.01419759\n",
      "Epoch: 2070/20000, Loss: 0.01409454\n",
      "Epoch: 2080/20000, Loss: 0.01399212\n",
      "Epoch: 2090/20000, Loss: 0.01389031\n",
      "Epoch: 2100/20000, Loss: 0.01378913\n",
      "Epoch: 2110/20000, Loss: 0.01368856\n",
      "Epoch: 2120/20000, Loss: 0.01358861\n",
      "Epoch: 2130/20000, Loss: 0.01348927\n",
      "Epoch: 2140/20000, Loss: 0.01339054\n",
      "Epoch: 2150/20000, Loss: 0.01329242\n",
      "Epoch: 2160/20000, Loss: 0.01319491\n",
      "Epoch: 2170/20000, Loss: 0.01309801\n",
      "Epoch: 2180/20000, Loss: 0.01300170\n",
      "Epoch: 2190/20000, Loss: 0.01290600\n",
      "Epoch: 2200/20000, Loss: 0.01281088\n",
      "Epoch: 2210/20000, Loss: 0.01271636\n",
      "Epoch: 2220/20000, Loss: 0.01262242\n",
      "Epoch: 2230/20000, Loss: 0.01252907\n",
      "Epoch: 2240/20000, Loss: 0.01243630\n",
      "Epoch: 2250/20000, Loss: 0.01234412\n",
      "Epoch: 2260/20000, Loss: 0.01225252\n",
      "Epoch: 2270/20000, Loss: 0.01216152\n",
      "Epoch: 2280/20000, Loss: 0.01207110\n",
      "Epoch: 2290/20000, Loss: 0.01198128\n",
      "Epoch: 2300/20000, Loss: 0.01189205\n",
      "Epoch: 2310/20000, Loss: 0.01180340\n",
      "Epoch: 2320/20000, Loss: 0.01171535\n",
      "Epoch: 2330/20000, Loss: 0.01162789\n",
      "Epoch: 2340/20000, Loss: 0.01154102\n",
      "Epoch: 2350/20000, Loss: 0.01145473\n",
      "Epoch: 2360/20000, Loss: 0.01136902\n",
      "Epoch: 2370/20000, Loss: 0.01128388\n",
      "Epoch: 2380/20000, Loss: 0.01119931\n",
      "Epoch: 2390/20000, Loss: 0.01111530\n",
      "Epoch: 2400/20000, Loss: 0.01103184\n",
      "Epoch: 2410/20000, Loss: 0.01094892\n",
      "Epoch: 2420/20000, Loss: 0.01086653\n",
      "Epoch: 2430/20000, Loss: 0.01078464\n",
      "Epoch: 2440/20000, Loss: 0.01070311\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 2450/20000, Loss: 0.01061996\n",
      "Epoch: 2460/20000, Loss: 0.01040083\n",
      "Epoch: 2470/20000, Loss: 0.01027217\n",
      "Epoch: 2480/20000, Loss: 0.01016673\n",
      "Epoch: 2490/20000, Loss: 0.01006963\n",
      "Epoch: 2500/20000, Loss: 0.00997499\n",
      "Epoch: 2510/20000, Loss: 0.00988188\n",
      "Epoch: 2520/20000, Loss: 0.00979005\n",
      "Epoch: 2530/20000, Loss: 0.00969937\n",
      "Epoch: 2540/20000, Loss: 0.00960976\n",
      "Epoch: 2550/20000, Loss: 0.00952115\n",
      "Epoch: 2560/20000, Loss: 0.00943330\n",
      "Epoch: 2570/20000, Loss: 0.00934089\n",
      "Epoch: 2580/20000, Loss: 0.00914175\n",
      "Epoch: 2590/20000, Loss: 0.00901025\n",
      "Epoch: 2600/20000, Loss: 0.00890524\n",
      "Epoch: 2610/20000, Loss: 0.00880577\n",
      "Epoch: 2620/20000, Loss: 0.00870863\n",
      "Epoch: 2630/20000, Loss: 0.00861325\n",
      "Epoch: 2640/20000, Loss: 0.00851892\n",
      "Epoch: 2650/20000, Loss: 0.00836779\n",
      "Epoch: 2660/20000, Loss: 0.00820722\n",
      "Epoch: 2670/20000, Loss: 0.00809531\n",
      "Epoch: 2680/20000, Loss: 0.00798950\n",
      "Epoch: 2690/20000, Loss: 0.00788677\n",
      "Epoch: 2700/20000, Loss: 0.00774924\n",
      "Epoch: 2710/20000, Loss: 0.00760744\n",
      "Epoch: 2720/20000, Loss: 0.00749289\n",
      "Epoch: 2730/20000, Loss: 0.00738321\n",
      "Epoch: 2740/20000, Loss: 0.00727618\n",
      "Epoch: 2750/20000, Loss: 0.00717156\n",
      "Epoch: 2760/20000, Loss: 0.00706923\n",
      "Epoch: 2770/20000, Loss: 0.00696911\n",
      "Epoch: 2780/20000, Loss: 0.00687115\n",
      "Epoch: 2790/20000, Loss: 0.00677529\n",
      "Epoch: 2800/20000, Loss: 0.00668147\n",
      "Epoch: 2810/20000, Loss: 0.00658963\n",
      "Epoch: 2820/20000, Loss: 0.00649971\n",
      "Epoch: 2830/20000, Loss: 0.00641163\n",
      "Epoch: 2840/20000, Loss: 0.00632535\n",
      "Epoch: 2850/20000, Loss: 0.00624080\n",
      "Epoch: 2860/20000, Loss: 0.00615792\n",
      "Epoch: 2870/20000, Loss: 0.00607666\n",
      "Epoch: 2880/20000, Loss: 0.00599697\n",
      "Epoch: 2890/20000, Loss: 0.00591880\n",
      "Epoch: 2900/20000, Loss: 0.00584208\n",
      "Epoch: 2910/20000, Loss: 0.00576677\n",
      "Epoch: 2920/20000, Loss: 0.00569279\n",
      "Epoch: 2930/20000, Loss: 0.00561984\n",
      "Epoch: 2940/20000, Loss: 0.00554140\n",
      "Epoch: 2950/20000, Loss: 0.00539996\n",
      "Epoch: 2960/20000, Loss: 0.00530159\n",
      "Epoch: 2970/20000, Loss: 0.00522186\n",
      "Epoch: 2980/20000, Loss: 0.00514532\n",
      "Epoch: 2990/20000, Loss: 0.00507073\n",
      "Epoch: 3000/20000, Loss: 0.00499805\n",
      "Epoch: 3010/20000, Loss: 0.00492712\n",
      "Epoch: 3020/20000, Loss: 0.00485783\n",
      "Epoch: 3030/20000, Loss: 0.00479011\n",
      "Epoch: 3040/20000, Loss: 0.00472390\n",
      "Epoch: 3050/20000, Loss: 0.00465915\n",
      "Epoch: 3060/20000, Loss: 0.00459578\n",
      "Epoch: 3070/20000, Loss: 0.00453375\n",
      "Epoch: 3080/20000, Loss: 0.00447300\n",
      "Epoch: 3090/20000, Loss: 0.00441349\n",
      "Epoch: 3100/20000, Loss: 0.00435516\n",
      "Epoch: 3110/20000, Loss: 0.00429797\n",
      "Epoch: 3120/20000, Loss: 0.00424188\n",
      "Epoch: 3130/20000, Loss: 0.00418685\n",
      "Epoch: 3140/20000, Loss: 0.00413282\n",
      "Epoch: 3150/20000, Loss: 0.00407976\n",
      "Epoch: 3160/20000, Loss: 0.00402764\n",
      "Epoch: 3170/20000, Loss: 0.00397641\n",
      "Epoch: 3180/20000, Loss: 0.00392604\n",
      "Epoch: 3190/20000, Loss: 0.00387651\n",
      "Epoch: 3200/20000, Loss: 0.00382778\n",
      "Epoch: 3210/20000, Loss: 0.00377981\n",
      "Epoch: 3220/20000, Loss: 0.00373256\n",
      "Epoch: 3230/20000, Loss: 0.00368589\n",
      "Epoch: 3240/20000, Loss: 0.00363758\n",
      "Epoch: 3250/20000, Loss: 0.00352144\n",
      "Epoch: 3260/20000, Loss: 0.00344965\n",
      "Epoch: 3270/20000, Loss: 0.00339725\n",
      "Epoch: 3280/20000, Loss: 0.00334794\n",
      "Epoch: 3290/20000, Loss: 0.00329996\n",
      "Epoch: 3300/20000, Loss: 0.00325329\n",
      "Epoch: 3310/20000, Loss: 0.00320766\n",
      "Epoch: 3320/20000, Loss: 0.00316301\n",
      "Epoch: 3330/20000, Loss: 0.00311931\n",
      "Epoch: 3340/20000, Loss: 0.00307651\n",
      "Epoch: 3350/20000, Loss: 0.00303459\n",
      "Epoch: 3360/20000, Loss: 0.00299351\n",
      "Epoch: 3370/20000, Loss: 0.00295325\n",
      "Epoch: 3380/20000, Loss: 0.00291378\n",
      "Epoch: 3390/20000, Loss: 0.00287507\n",
      "Epoch: 3400/20000, Loss: 0.00283711\n",
      "Epoch: 3410/20000, Loss: 0.00279987\n",
      "Epoch: 3420/20000, Loss: 0.00276331\n",
      "Epoch: 3430/20000, Loss: 0.00272743\n",
      "Epoch: 3440/20000, Loss: 0.00269220\n",
      "Epoch: 3450/20000, Loss: 0.00265759\n",
      "Epoch: 3460/20000, Loss: 0.00262359\n",
      "Epoch: 3470/20000, Loss: 0.00259018\n",
      "Epoch: 3480/20000, Loss: 0.00255735\n",
      "Epoch: 3490/20000, Loss: 0.00252507\n",
      "Epoch: 3500/20000, Loss: 0.00249334\n",
      "Epoch: 3510/20000, Loss: 0.00246215\n",
      "Epoch: 3520/20000, Loss: 0.00243147\n",
      "Epoch: 3530/20000, Loss: 0.00240131\n",
      "Epoch: 3540/20000, Loss: 0.00237164\n",
      "Epoch: 3550/20000, Loss: 0.00234245\n",
      "Epoch: 3560/20000, Loss: 0.00231375\n",
      "Epoch: 3570/20000, Loss: 0.00228551\n",
      "Epoch: 3580/20000, Loss: 0.00225772\n",
      "Epoch: 3590/20000, Loss: 0.00223038\n",
      "Epoch: 3600/20000, Loss: 0.00220348\n",
      "Epoch: 3610/20000, Loss: 0.00217701\n",
      "Epoch: 3620/20000, Loss: 0.00215096\n",
      "Epoch: 3630/20000, Loss: 0.00212532\n",
      "Epoch: 3640/20000, Loss: 0.00210008\n",
      "Epoch: 3650/20000, Loss: 0.00207524\n",
      "Epoch: 3660/20000, Loss: 0.00205079\n",
      "Epoch: 3670/20000, Loss: 0.00202671\n",
      "Epoch: 3680/20000, Loss: 0.00200301\n",
      "Epoch: 3690/20000, Loss: 0.00197967\n",
      "Epoch: 3700/20000, Loss: 0.00195670\n",
      "Epoch: 3710/20000, Loss: 0.00193407\n",
      "Epoch: 3720/20000, Loss: 0.00191178\n",
      "Epoch: 3730/20000, Loss: 0.00188984\n",
      "Epoch: 3740/20000, Loss: 0.00186822\n",
      "Epoch: 3750/20000, Loss: 0.00184693\n",
      "Epoch: 3760/20000, Loss: 0.00182596\n",
      "Epoch: 3770/20000, Loss: 0.00180531\n",
      "Epoch: 3780/20000, Loss: 0.00178496\n",
      "Epoch: 3790/20000, Loss: 0.00176491\n",
      "Epoch: 3800/20000, Loss: 0.00174516\n",
      "Epoch: 3810/20000, Loss: 0.00172571\n",
      "Epoch: 3820/20000, Loss: 0.00170654\n",
      "Epoch: 3830/20000, Loss: 0.00168765\n",
      "Epoch: 3840/20000, Loss: 0.00166904\n",
      "Epoch: 3850/20000, Loss: 0.00165070\n",
      "Epoch: 3860/20000, Loss: 0.00163263\n",
      "Epoch: 3870/20000, Loss: 0.00161482\n",
      "Epoch: 3880/20000, Loss: 0.00159727\n",
      "Epoch: 3890/20000, Loss: 0.00157997\n",
      "Epoch: 3900/20000, Loss: 0.00156292\n",
      "Epoch: 3910/20000, Loss: 0.00154611\n",
      "Epoch: 3920/20000, Loss: 0.00152955\n",
      "Epoch: 3930/20000, Loss: 0.00151322\n",
      "Epoch: 3940/20000, Loss: 0.00149712\n",
      "Epoch: 3950/20000, Loss: 0.00148124\n",
      "Epoch: 3960/20000, Loss: 0.00146559\n",
      "Epoch: 3970/20000, Loss: 0.00145016\n",
      "Epoch: 3980/20000, Loss: 0.00143494\n",
      "Epoch: 3990/20000, Loss: 0.00141994\n",
      "Epoch: 4000/20000, Loss: 0.00140514\n",
      "Epoch: 4010/20000, Loss: 0.00139054\n",
      "Epoch: 4020/20000, Loss: 0.00137614\n",
      "Epoch: 4030/20000, Loss: 0.00136194\n",
      "Epoch: 4040/20000, Loss: 0.00134793\n",
      "Epoch: 4050/20000, Loss: 0.00133411\n",
      "Epoch: 4060/20000, Loss: 0.00132047\n",
      "Epoch: 4070/20000, Loss: 0.00130702\n",
      "Epoch: 4080/20000, Loss: 0.00129374\n",
      "Epoch: 4090/20000, Loss: 0.00128064\n",
      "Epoch: 4100/20000, Loss: 0.00126771\n",
      "Epoch: 4110/20000, Loss: 0.00125495\n",
      "Epoch: 4120/20000, Loss: 0.00124236\n",
      "Epoch: 4130/20000, Loss: 0.00122993\n",
      "Epoch: 4140/20000, Loss: 0.00121766\n",
      "Epoch: 4150/20000, Loss: 0.00120555\n",
      "Epoch: 4160/20000, Loss: 0.00119359\n",
      "Epoch: 4170/20000, Loss: 0.00118179\n",
      "Epoch: 4180/20000, Loss: 0.00117013\n",
      "Epoch: 4190/20000, Loss: 0.00115862\n",
      "Epoch: 4200/20000, Loss: 0.00114726\n",
      "Epoch: 4210/20000, Loss: 0.00113604\n",
      "Epoch: 4220/20000, Loss: 0.00112496\n",
      "Epoch: 4230/20000, Loss: 0.00111402\n",
      "Epoch: 4240/20000, Loss: 0.00110321\n",
      "Epoch: 4250/20000, Loss: 0.00109254\n",
      "Epoch: 4260/20000, Loss: 0.00108200\n",
      "Epoch: 4270/20000, Loss: 0.00107159\n",
      "Epoch: 4280/20000, Loss: 0.00106130\n",
      "Epoch: 4290/20000, Loss: 0.00105114\n",
      "Epoch: 4300/20000, Loss: 0.00104110\n",
      "Epoch: 4310/20000, Loss: 0.00103119\n",
      "Epoch: 4320/20000, Loss: 0.00102139\n",
      "Epoch: 4330/20000, Loss: 0.00101171\n",
      "Epoch: 4340/20000, Loss: 0.00100214\n",
      "Epoch: 4350/20000, Loss: 0.00099269\n",
      "Epoch: 4360/20000, Loss: 0.00098335\n",
      "Epoch: 4370/20000, Loss: 0.00097412\n",
      "Epoch: 4380/20000, Loss: 0.00096500\n",
      "Epoch: 4390/20000, Loss: 0.00095598\n",
      "Epoch: 4400/20000, Loss: 0.00094707\n",
      "Epoch: 4410/20000, Loss: 0.00093826\n",
      "Epoch: 4420/20000, Loss: 0.00092956\n",
      "Epoch: 4430/20000, Loss: 0.00092095\n",
      "Epoch: 4440/20000, Loss: 0.00091245\n",
      "Epoch: 4450/20000, Loss: 0.00090404\n",
      "Epoch: 4460/20000, Loss: 0.00089572\n",
      "Epoch: 4470/20000, Loss: 0.00088750\n",
      "Epoch: 4480/20000, Loss: 0.00087937\n",
      "Epoch: 4490/20000, Loss: 0.00087133\n",
      "Epoch: 4500/20000, Loss: 0.00086339\n",
      "Epoch: 4510/20000, Loss: 0.00085553\n",
      "Epoch: 4520/20000, Loss: 0.00084776\n",
      "Epoch: 4530/20000, Loss: 0.00084007\n",
      "Epoch: 4540/20000, Loss: 0.00083247\n",
      "Epoch: 4550/20000, Loss: 0.00082495\n",
      "Epoch: 4560/20000, Loss: 0.00081752\n",
      "Epoch: 4570/20000, Loss: 0.00081016\n",
      "Epoch: 4580/20000, Loss: 0.00080289\n",
      "Epoch: 4590/20000, Loss: 0.00079569\n",
      "Epoch: 4600/20000, Loss: 0.00078857\n",
      "Epoch: 4610/20000, Loss: 0.00078153\n",
      "Epoch: 4620/20000, Loss: 0.00077456\n",
      "Epoch: 4630/20000, Loss: 0.00076767\n",
      "Epoch: 4640/20000, Loss: 0.00076085\n",
      "Epoch: 4650/20000, Loss: 0.00075410\n",
      "Epoch: 4660/20000, Loss: 0.00074742\n",
      "Epoch: 4670/20000, Loss: 0.00074082\n",
      "Epoch: 4680/20000, Loss: 0.00073428\n",
      "Epoch: 4690/20000, Loss: 0.00072781\n",
      "Epoch: 4700/20000, Loss: 0.00072140\n",
      "Epoch: 4710/20000, Loss: 0.00071506\n",
      "Epoch: 4720/20000, Loss: 0.00070877\n",
      "Epoch: 4730/20000, Loss: 0.00070247\n",
      "Epoch: 4740/20000, Loss: 0.00069624\n",
      "Epoch: 4750/20000, Loss: 0.00069007\n",
      "Epoch: 4760/20000, Loss: 0.00068396\n",
      "Epoch: 4770/20000, Loss: 0.00067791\n",
      "Epoch: 4780/20000, Loss: 0.00067192\n",
      "Epoch: 4790/20000, Loss: 0.00066598\n",
      "Epoch: 4800/20000, Loss: 0.00066010\n",
      "Epoch: 4810/20000, Loss: 0.00065427\n",
      "Epoch: 4820/20000, Loss: 0.00064850\n",
      "Epoch: 4830/20000, Loss: 0.00064278\n",
      "Epoch: 4840/20000, Loss: 0.00063712\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 4850/20000, Loss: 0.00063150\n",
      "Epoch: 4860/20000, Loss: 0.00062594\n",
      "Epoch: 4870/20000, Loss: 0.00062043\n",
      "Epoch: 4880/20000, Loss: 0.00061498\n",
      "Epoch: 4890/20000, Loss: 0.00060957\n",
      "Epoch: 4900/20000, Loss: 0.00060421\n",
      "Epoch: 4910/20000, Loss: 0.00059891\n",
      "Epoch: 4920/20000, Loss: 0.00059365\n",
      "Epoch: 4930/20000, Loss: 0.00058844\n",
      "Epoch: 4940/20000, Loss: 0.00058328\n",
      "Epoch: 4950/20000, Loss: 0.00057817\n",
      "Epoch: 4960/20000, Loss: 0.00057311\n",
      "Epoch: 4970/20000, Loss: 0.00056809\n",
      "Epoch: 4980/20000, Loss: 0.00056312\n",
      "Epoch: 4990/20000, Loss: 0.00055819\n",
      "Epoch: 5000/20000, Loss: 0.00055332\n",
      "Epoch: 5010/20000, Loss: 0.00054848\n",
      "Epoch: 5020/20000, Loss: 0.00054369\n",
      "Epoch: 5030/20000, Loss: 0.00053895\n",
      "Epoch: 5040/20000, Loss: 0.00053425\n",
      "Epoch: 5050/20000, Loss: 0.00052959\n",
      "Epoch: 5060/20000, Loss: 0.00052498\n",
      "Epoch: 5070/20000, Loss: 0.00052040\n",
      "Epoch: 5080/20000, Loss: 0.00051587\n",
      "Epoch: 5090/20000, Loss: 0.00051139\n",
      "Epoch: 5100/20000, Loss: 0.00050694\n",
      "Epoch: 5110/20000, Loss: 0.00050253\n",
      "Epoch: 5120/20000, Loss: 0.00049817\n",
      "Epoch: 5130/20000, Loss: 0.00049384\n",
      "Epoch: 5140/20000, Loss: 0.00048956\n",
      "Epoch: 5150/20000, Loss: 0.00048531\n",
      "Epoch: 5160/20000, Loss: 0.00048110\n",
      "Epoch: 5170/20000, Loss: 0.00047693\n",
      "Epoch: 5180/20000, Loss: 0.00047280\n",
      "Epoch: 5190/20000, Loss: 0.00046871\n",
      "Epoch: 5200/20000, Loss: 0.00046465\n",
      "Epoch: 5210/20000, Loss: 0.00046063\n",
      "Epoch: 5220/20000, Loss: 0.00045665\n",
      "Epoch: 5230/20000, Loss: 0.00045270\n",
      "Epoch: 5240/20000, Loss: 0.00044879\n",
      "Epoch: 5250/20000, Loss: 0.00044491\n",
      "Epoch: 5260/20000, Loss: 0.00044107\n",
      "Epoch: 5270/20000, Loss: 0.00043727\n",
      "Epoch: 5280/20000, Loss: 0.00043349\n",
      "Epoch: 5290/20000, Loss: 0.00042975\n",
      "Epoch: 5300/20000, Loss: 0.00042605\n",
      "Epoch: 5310/20000, Loss: 0.00042238\n",
      "Epoch: 5320/20000, Loss: 0.00041874\n",
      "Epoch: 5330/20000, Loss: 0.00041513\n",
      "Epoch: 5340/20000, Loss: 0.00041156\n",
      "Epoch: 5350/20000, Loss: 0.00040801\n",
      "Epoch: 5360/20000, Loss: 0.00040450\n",
      "Epoch: 5370/20000, Loss: 0.00040102\n",
      "Epoch: 5380/20000, Loss: 0.00039757\n",
      "Epoch: 5390/20000, Loss: 0.00039415\n",
      "Epoch: 5400/20000, Loss: 0.00039076\n",
      "Epoch: 5410/20000, Loss: 0.00038740\n",
      "Epoch: 5420/20000, Loss: 0.00038407\n",
      "Epoch: 5430/20000, Loss: 0.00038077\n",
      "Epoch: 5440/20000, Loss: 0.00037750\n",
      "Epoch: 5450/20000, Loss: 0.00037425\n",
      "Epoch: 5460/20000, Loss: 0.00037104\n",
      "Epoch: 5470/20000, Loss: 0.00036785\n",
      "Epoch: 5480/20000, Loss: 0.00036468\n",
      "Epoch: 5490/20000, Loss: 0.00036155\n",
      "Epoch: 5500/20000, Loss: 0.00035844\n",
      "Epoch: 5510/20000, Loss: 0.00035536\n",
      "Epoch: 5520/20000, Loss: 0.00035230\n",
      "Epoch: 5530/20000, Loss: 0.00034927\n",
      "Epoch: 5540/20000, Loss: 0.00034627\n",
      "Epoch: 5550/20000, Loss: 0.00034329\n",
      "Epoch: 5560/20000, Loss: 0.00034034\n",
      "Epoch: 5570/20000, Loss: 0.00033741\n",
      "Epoch: 5580/20000, Loss: 0.00033450\n",
      "Epoch: 5590/20000, Loss: 0.00033162\n",
      "Epoch: 5600/20000, Loss: 0.00032876\n",
      "Epoch: 5610/20000, Loss: 0.00032593\n",
      "Epoch: 5620/20000, Loss: 0.00032312\n",
      "Epoch: 5630/20000, Loss: 0.00032033\n",
      "Epoch: 5640/20000, Loss: 0.00031757\n",
      "Epoch: 5650/20000, Loss: 0.00031483\n",
      "Epoch: 5660/20000, Loss: 0.00031211\n",
      "Epoch: 5670/20000, Loss: 0.00030941\n",
      "Epoch: 5680/20000, Loss: 0.00030674\n",
      "Epoch: 5690/20000, Loss: 0.00030409\n",
      "Epoch: 5700/20000, Loss: 0.00030146\n",
      "Epoch: 5710/20000, Loss: 0.00029885\n",
      "Epoch: 5720/20000, Loss: 0.00029627\n",
      "Epoch: 5730/20000, Loss: 0.00029370\n",
      "Epoch: 5740/20000, Loss: 0.00029116\n",
      "Epoch: 5750/20000, Loss: 0.00028863\n",
      "Epoch: 5760/20000, Loss: 0.00028613\n",
      "Epoch: 5770/20000, Loss: 0.00028365\n",
      "Epoch: 5780/20000, Loss: 0.00028119\n",
      "Epoch: 5790/20000, Loss: 0.00027875\n",
      "Epoch: 5800/20000, Loss: 0.00027632\n",
      "Epoch: 5810/20000, Loss: 0.00027392\n",
      "Epoch: 5820/20000, Loss: 0.00027154\n",
      "Epoch: 5830/20000, Loss: 0.00026918\n",
      "Epoch: 5840/20000, Loss: 0.00026684\n",
      "Epoch: 5850/20000, Loss: 0.00026452\n",
      "Epoch: 5860/20000, Loss: 0.00026221\n",
      "Epoch: 5870/20000, Loss: 0.00025993\n",
      "Epoch: 5880/20000, Loss: 0.00025766\n",
      "Epoch: 5890/20000, Loss: 0.00025541\n",
      "Epoch: 5900/20000, Loss: 0.00025319\n",
      "Epoch: 5910/20000, Loss: 0.00025098\n",
      "Epoch: 5920/20000, Loss: 0.00024878\n",
      "Epoch: 5930/20000, Loss: 0.00024661\n",
      "Epoch: 5940/20000, Loss: 0.00024445\n",
      "Epoch: 5950/20000, Loss: 0.00024231\n",
      "Epoch: 5960/20000, Loss: 0.00024019\n",
      "Epoch: 5970/20000, Loss: 0.00023809\n",
      "Epoch: 5980/20000, Loss: 0.00023600\n",
      "Epoch: 5990/20000, Loss: 0.00023393\n",
      "Epoch: 6000/20000, Loss: 0.00023188\n",
      "Epoch: 6010/20000, Loss: 0.00022984\n",
      "Epoch: 6020/20000, Loss: 0.00022782\n",
      "Epoch: 6030/20000, Loss: 0.00022582\n",
      "Epoch: 6040/20000, Loss: 0.00022383\n",
      "Epoch: 6050/20000, Loss: 0.00022185\n",
      "Epoch: 6060/20000, Loss: 0.00021990\n",
      "Epoch: 6070/20000, Loss: 0.00021796\n",
      "Epoch: 6080/20000, Loss: 0.00021603\n",
      "Epoch: 6090/20000, Loss: 0.00021412\n",
      "Epoch: 6100/20000, Loss: 0.00021222\n",
      "Epoch: 6110/20000, Loss: 0.00021034\n",
      "Epoch: 6120/20000, Loss: 0.00020847\n",
      "Epoch: 6130/20000, Loss: 0.00020662\n",
      "Epoch: 6140/20000, Loss: 0.00020479\n",
      "Epoch: 6150/20000, Loss: 0.00020296\n",
      "Epoch: 6160/20000, Loss: 0.00020116\n",
      "Epoch: 6170/20000, Loss: 0.00019936\n",
      "Epoch: 6180/20000, Loss: 0.00019759\n",
      "Epoch: 6190/20000, Loss: 0.00019582\n",
      "Epoch: 6200/20000, Loss: 0.00019407\n",
      "Epoch: 6210/20000, Loss: 0.00019234\n",
      "Epoch: 6220/20000, Loss: 0.00019068\n",
      "Epoch: 6230/20000, Loss: 0.00018892\n",
      "Epoch: 6240/20000, Loss: 0.00018723\n",
      "Epoch: 6250/20000, Loss: 0.00018555\n",
      "Epoch: 6260/20000, Loss: 0.00018388\n",
      "Epoch: 6270/20000, Loss: 0.00018223\n",
      "Epoch: 6280/20000, Loss: 0.00018060\n",
      "Epoch: 6290/20000, Loss: 0.00017898\n",
      "Epoch: 6300/20000, Loss: 0.00017737\n",
      "Epoch: 6310/20000, Loss: 0.00017577\n",
      "Epoch: 6320/20000, Loss: 0.00017419\n",
      "Epoch: 6330/20000, Loss: 0.00017262\n",
      "Epoch: 6340/20000, Loss: 0.00017107\n",
      "Epoch: 6350/20000, Loss: 0.00016953\n",
      "Epoch: 6360/20000, Loss: 0.00016800\n",
      "Epoch: 6370/20000, Loss: 0.00016648\n",
      "Epoch: 6380/20000, Loss: 0.00016498\n",
      "Epoch: 6390/20000, Loss: 0.00016348\n",
      "Epoch: 6400/20000, Loss: 0.00016200\n",
      "Epoch: 6410/20000, Loss: 0.00016054\n",
      "Epoch: 6420/20000, Loss: 0.00015908\n",
      "Epoch: 6430/20000, Loss: 0.00015764\n",
      "Epoch: 6440/20000, Loss: 0.00015622\n",
      "Epoch: 6450/20000, Loss: 0.00015487\n",
      "Epoch: 6460/20000, Loss: 0.00015340\n",
      "Epoch: 6470/20000, Loss: 0.00015200\n",
      "Epoch: 6480/20000, Loss: 0.00015062\n",
      "Epoch: 6490/20000, Loss: 0.00014925\n",
      "Epoch: 6500/20000, Loss: 0.00014789\n",
      "Epoch: 6510/20000, Loss: 0.00014655\n",
      "Epoch: 6520/20000, Loss: 0.00014522\n",
      "Epoch: 6530/20000, Loss: 0.00014389\n",
      "Epoch: 6540/20000, Loss: 0.00014258\n",
      "Epoch: 6550/20000, Loss: 0.00014128\n",
      "Epoch: 6560/20000, Loss: 0.00013999\n",
      "Epoch: 6570/20000, Loss: 0.00013871\n",
      "Epoch: 6580/20000, Loss: 0.00013745\n",
      "Epoch: 6590/20000, Loss: 0.00013619\n",
      "Epoch: 6600/20000, Loss: 0.00013495\n",
      "Epoch: 6610/20000, Loss: 0.00013371\n",
      "Epoch: 6620/20000, Loss: 0.00013249\n",
      "Epoch: 6630/20000, Loss: 0.00013127\n",
      "Epoch: 6640/20000, Loss: 0.00013007\n",
      "Epoch: 6650/20000, Loss: 0.00012887\n",
      "Epoch: 6660/20000, Loss: 0.00012769\n",
      "Epoch: 6670/20000, Loss: 0.00012652\n",
      "Epoch: 6680/20000, Loss: 0.00012543\n",
      "Epoch: 6690/20000, Loss: 0.00012424\n",
      "Epoch: 6700/20000, Loss: 0.00012307\n",
      "Epoch: 6710/20000, Loss: 0.00012193\n",
      "Epoch: 6720/20000, Loss: 0.00012080\n",
      "Epoch: 6730/20000, Loss: 0.00011969\n",
      "Epoch: 6740/20000, Loss: 0.00011858\n",
      "Epoch: 6750/20000, Loss: 0.00011749\n",
      "Epoch: 6760/20000, Loss: 0.00011640\n",
      "Epoch: 6770/20000, Loss: 0.00011532\n",
      "Epoch: 6780/20000, Loss: 0.00011425\n",
      "Epoch: 6790/20000, Loss: 0.00011319\n",
      "Epoch: 6800/20000, Loss: 0.00011214\n",
      "Epoch: 6810/20000, Loss: 0.00011110\n",
      "Epoch: 6820/20000, Loss: 0.00011006\n",
      "Epoch: 6830/20000, Loss: 0.00010904\n",
      "Epoch: 6840/20000, Loss: 0.00010802\n",
      "Epoch: 6850/20000, Loss: 0.00010701\n",
      "Epoch: 6860/20000, Loss: 0.00010601\n",
      "Epoch: 6870/20000, Loss: 0.00010501\n",
      "Epoch: 6880/20000, Loss: 0.00010403\n",
      "Epoch: 6890/20000, Loss: 0.00010305\n",
      "Epoch: 6900/20000, Loss: 0.00010208\n",
      "Epoch: 6910/20000, Loss: 0.00010112\n",
      "Epoch: 6920/20000, Loss: 0.00010016\n",
      "Epoch: 6930/20000, Loss: 0.00009921\n",
      "Epoch: 6940/20000, Loss: 0.00009826\n",
      "Epoch: 6950/20000, Loss: 0.00009730\n",
      "Epoch: 6960/20000, Loss: 0.00009659\n",
      "Epoch: 6970/20000, Loss: 0.00009552\n",
      "Epoch: 6980/20000, Loss: 0.00009455\n",
      "Epoch: 6990/20000, Loss: 0.00009366\n",
      "Epoch: 7000/20000, Loss: 0.00009278\n",
      "Epoch: 7010/20000, Loss: 0.00009190\n",
      "Epoch: 7020/20000, Loss: 0.00009103\n",
      "Epoch: 7030/20000, Loss: 0.00009017\n",
      "Epoch: 7040/20000, Loss: 0.00008932\n",
      "Epoch: 7050/20000, Loss: 0.00008848\n",
      "Epoch: 7060/20000, Loss: 0.00008764\n",
      "Epoch: 7070/20000, Loss: 0.00008681\n",
      "Epoch: 7080/20000, Loss: 0.00008599\n",
      "Epoch: 7090/20000, Loss: 0.00008518\n",
      "Epoch: 7100/20000, Loss: 0.00008437\n",
      "Epoch: 7110/20000, Loss: 0.00008357\n",
      "Epoch: 7120/20000, Loss: 0.00008278\n",
      "Epoch: 7130/20000, Loss: 0.00008199\n",
      "Epoch: 7140/20000, Loss: 0.00008121\n",
      "Epoch: 7150/20000, Loss: 0.00008044\n",
      "Epoch: 7160/20000, Loss: 0.00007968\n",
      "Epoch: 7170/20000, Loss: 0.00007892\n",
      "Epoch: 7180/20000, Loss: 0.00007817\n",
      "Epoch: 7190/20000, Loss: 0.00007743\n",
      "Epoch: 7200/20000, Loss: 0.00007669\n",
      "Epoch: 7210/20000, Loss: 0.00007596\n",
      "Epoch: 7220/20000, Loss: 0.00007523\n",
      "Epoch: 7230/20000, Loss: 0.00007451\n",
      "Epoch: 7240/20000, Loss: 0.00007380\n",
      "Epoch: 7250/20000, Loss: 0.00007310\n",
      "Epoch: 7260/20000, Loss: 0.00007240\n",
      "Epoch: 7270/20000, Loss: 0.00007170\n",
      "Epoch: 7280/20000, Loss: 0.00007102\n",
      "Epoch: 7290/20000, Loss: 0.00007034\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 7300/20000, Loss: 0.00006966\n",
      "Epoch: 7310/20000, Loss: 0.00006900\n",
      "Epoch: 7320/20000, Loss: 0.00006833\n",
      "Epoch: 7330/20000, Loss: 0.00006768\n",
      "Epoch: 7340/20000, Loss: 0.00006703\n",
      "Epoch: 7350/20000, Loss: 0.00006638\n",
      "Epoch: 7360/20000, Loss: 0.00006575\n",
      "Epoch: 7370/20000, Loss: 0.00006511\n",
      "Epoch: 7380/20000, Loss: 0.00006449\n",
      "Epoch: 7390/20000, Loss: 0.00006387\n",
      "Epoch: 7400/20000, Loss: 0.00006329\n",
      "Epoch: 7410/20000, Loss: 0.00006266\n",
      "Epoch: 7420/20000, Loss: 0.00006205\n",
      "Epoch: 7430/20000, Loss: 0.00006144\n",
      "Epoch: 7440/20000, Loss: 0.00006085\n",
      "Epoch: 7450/20000, Loss: 0.00006027\n",
      "Epoch: 7460/20000, Loss: 0.00005968\n",
      "Epoch: 7470/20000, Loss: 0.00005911\n",
      "Epoch: 7480/20000, Loss: 0.00005854\n",
      "Epoch: 7490/20000, Loss: 0.00005797\n",
      "Epoch: 7500/20000, Loss: 0.00005741\n",
      "Epoch: 7510/20000, Loss: 0.00005686\n",
      "Epoch: 7520/20000, Loss: 0.00005631\n",
      "Epoch: 7530/20000, Loss: 0.00005577\n",
      "Epoch: 7540/20000, Loss: 0.00005523\n",
      "Epoch: 7550/20000, Loss: 0.00005469\n",
      "Epoch: 7560/20000, Loss: 0.00005416\n",
      "Epoch: 7570/20000, Loss: 0.00005364\n",
      "Epoch: 7580/20000, Loss: 0.00005312\n",
      "Epoch: 7590/20000, Loss: 0.00005261\n",
      "Epoch: 7600/20000, Loss: 0.00005217\n",
      "Epoch: 7610/20000, Loss: 0.00005159\n",
      "Epoch: 7620/20000, Loss: 0.00005110\n",
      "Epoch: 7630/20000, Loss: 0.00005060\n",
      "Epoch: 7640/20000, Loss: 0.00005011\n",
      "Epoch: 7650/20000, Loss: 0.00004962\n",
      "Epoch: 7660/20000, Loss: 0.00004914\n",
      "Epoch: 7670/20000, Loss: 0.00004866\n",
      "Epoch: 7680/20000, Loss: 0.00004819\n",
      "Epoch: 7690/20000, Loss: 0.00004772\n",
      "Epoch: 7700/20000, Loss: 0.00004726\n",
      "Epoch: 7710/20000, Loss: 0.00004680\n",
      "Epoch: 7720/20000, Loss: 0.00004635\n",
      "Epoch: 7730/20000, Loss: 0.00004590\n",
      "Epoch: 7740/20000, Loss: 0.00004545\n",
      "Epoch: 7750/20000, Loss: 0.00004501\n",
      "Epoch: 7760/20000, Loss: 0.00004457\n",
      "Epoch: 7770/20000, Loss: 0.00004414\n",
      "Epoch: 7780/20000, Loss: 0.00004371\n",
      "Epoch: 7790/20000, Loss: 0.00004329\n",
      "Epoch: 7800/20000, Loss: 0.00004288\n",
      "Epoch: 7810/20000, Loss: 0.00004245\n",
      "Epoch: 7820/20000, Loss: 0.00004205\n",
      "Epoch: 7830/20000, Loss: 0.00004163\n",
      "Epoch: 7840/20000, Loss: 0.00004122\n",
      "Epoch: 7850/20000, Loss: 0.00004082\n",
      "Epoch: 7860/20000, Loss: 0.00004042\n",
      "Epoch: 7870/20000, Loss: 0.00004003\n",
      "Epoch: 7880/20000, Loss: 0.00003964\n",
      "Epoch: 7890/20000, Loss: 0.00003926\n",
      "Epoch: 7900/20000, Loss: 0.00003887\n",
      "Epoch: 7910/20000, Loss: 0.00003850\n",
      "Epoch: 7920/20000, Loss: 0.00003812\n",
      "Epoch: 7930/20000, Loss: 0.00003775\n",
      "Epoch: 7940/20000, Loss: 0.00003738\n",
      "Epoch: 7950/20000, Loss: 0.00003702\n",
      "Epoch: 7960/20000, Loss: 0.00003666\n",
      "Epoch: 7970/20000, Loss: 0.00003630\n",
      "Epoch: 7980/20000, Loss: 0.00003595\n",
      "Epoch: 7990/20000, Loss: 0.00003564\n",
      "Epoch: 8000/20000, Loss: 0.00003527\n",
      "Epoch: 8010/20000, Loss: 0.00003492\n",
      "Epoch: 8020/20000, Loss: 0.00003457\n",
      "Epoch: 8030/20000, Loss: 0.00003423\n",
      "Epoch: 8040/20000, Loss: 0.00003390\n",
      "Epoch: 8050/20000, Loss: 0.00003357\n",
      "Epoch: 8060/20000, Loss: 0.00003324\n",
      "Epoch: 8070/20000, Loss: 0.00003291\n",
      "Epoch: 8080/20000, Loss: 0.00003259\n",
      "Epoch: 8090/20000, Loss: 0.00003228\n",
      "Epoch: 8100/20000, Loss: 0.00003196\n",
      "Epoch: 8110/20000, Loss: 0.00003165\n",
      "Epoch: 8120/20000, Loss: 0.00003134\n",
      "Epoch: 8130/20000, Loss: 0.00003104\n",
      "Epoch: 8140/20000, Loss: 0.00003073\n",
      "Epoch: 8150/20000, Loss: 0.00003043\n",
      "Epoch: 8160/20000, Loss: 0.00003014\n",
      "Epoch: 8170/20000, Loss: 0.00002984\n",
      "Epoch: 8180/20000, Loss: 0.00002955\n",
      "Epoch: 8190/20000, Loss: 0.00002929\n",
      "Epoch: 8200/20000, Loss: 0.00002898\n",
      "Epoch: 8210/20000, Loss: 0.00002871\n",
      "Epoch: 8220/20000, Loss: 0.00002842\n",
      "Epoch: 8230/20000, Loss: 0.00002814\n",
      "Epoch: 8240/20000, Loss: 0.00002786\n",
      "Epoch: 8250/20000, Loss: 0.00002759\n",
      "Epoch: 8260/20000, Loss: 0.00002732\n",
      "Epoch: 8270/20000, Loss: 0.00002706\n",
      "Epoch: 8280/20000, Loss: 0.00002679\n",
      "Epoch: 8290/20000, Loss: 0.00002653\n",
      "Epoch: 8300/20000, Loss: 0.00002627\n",
      "Epoch: 8310/20000, Loss: 0.00002601\n",
      "Epoch: 8320/20000, Loss: 0.00002576\n",
      "Epoch: 8330/20000, Loss: 0.00002551\n",
      "Epoch: 8340/20000, Loss: 0.00002526\n",
      "Epoch: 8350/20000, Loss: 0.00002501\n",
      "Epoch: 8360/20000, Loss: 0.00002477\n",
      "Epoch: 8370/20000, Loss: 0.00002453\n",
      "Epoch: 8380/20000, Loss: 0.00002434\n",
      "Epoch: 8390/20000, Loss: 0.00002408\n",
      "Epoch: 8400/20000, Loss: 0.00002382\n",
      "Epoch: 8410/20000, Loss: 0.00002359\n",
      "Epoch: 8420/20000, Loss: 0.00002335\n",
      "Epoch: 8430/20000, Loss: 0.00002313\n",
      "Epoch: 8440/20000, Loss: 0.00002290\n",
      "Epoch: 8450/20000, Loss: 0.00002268\n",
      "Epoch: 8460/20000, Loss: 0.00002245\n",
      "Epoch: 8470/20000, Loss: 0.00002223\n",
      "Epoch: 8480/20000, Loss: 0.00002202\n",
      "Epoch: 8490/20000, Loss: 0.00002180\n",
      "Epoch: 8500/20000, Loss: 0.00002159\n",
      "Epoch: 8510/20000, Loss: 0.00002138\n",
      "Epoch: 8520/20000, Loss: 0.00002117\n",
      "Epoch: 8530/20000, Loss: 0.00002096\n",
      "Epoch: 8540/20000, Loss: 0.00002076\n",
      "Epoch: 8550/20000, Loss: 0.00002055\n",
      "Epoch: 8560/20000, Loss: 0.00002035\n",
      "Epoch: 8570/20000, Loss: 0.00002015\n",
      "Epoch: 8580/20000, Loss: 0.00001997\n",
      "Epoch: 8590/20000, Loss: 0.00001977\n",
      "Epoch: 8600/20000, Loss: 0.00001957\n",
      "Epoch: 8610/20000, Loss: 0.00001938\n",
      "Epoch: 8620/20000, Loss: 0.00001919\n",
      "Epoch: 8630/20000, Loss: 0.00001900\n",
      "Epoch: 8640/20000, Loss: 0.00001881\n",
      "Epoch: 8650/20000, Loss: 0.00001863\n",
      "Epoch: 8660/20000, Loss: 0.00001845\n",
      "Epoch: 8670/20000, Loss: 0.00001827\n",
      "Epoch: 8680/20000, Loss: 0.00001809\n",
      "Epoch: 8690/20000, Loss: 0.00001791\n",
      "Epoch: 8700/20000, Loss: 0.00001773\n",
      "Epoch: 8710/20000, Loss: 0.00001756\n",
      "Epoch: 8720/20000, Loss: 0.00001739\n",
      "Epoch: 8730/20000, Loss: 0.00001722\n",
      "Epoch: 8740/20000, Loss: 0.00001705\n",
      "Epoch: 8750/20000, Loss: 0.00001688\n",
      "Epoch: 8760/20000, Loss: 0.00001680\n",
      "Epoch: 8770/20000, Loss: 0.00001660\n",
      "Epoch: 8780/20000, Loss: 0.00001639\n",
      "Epoch: 8790/20000, Loss: 0.00001623\n",
      "Epoch: 8800/20000, Loss: 0.00001607\n",
      "Epoch: 8810/20000, Loss: 0.00001591\n",
      "Epoch: 8820/20000, Loss: 0.00001576\n",
      "Epoch: 8830/20000, Loss: 0.00001560\n",
      "Epoch: 8840/20000, Loss: 0.00001545\n",
      "Epoch: 8850/20000, Loss: 0.00001530\n",
      "Epoch: 8860/20000, Loss: 0.00001515\n",
      "Epoch: 8870/20000, Loss: 0.00001500\n",
      "Epoch: 8880/20000, Loss: 0.00001485\n",
      "Epoch: 8890/20000, Loss: 0.00001471\n",
      "Epoch: 8900/20000, Loss: 0.00001456\n",
      "Epoch: 8910/20000, Loss: 0.00001442\n",
      "Epoch: 8920/20000, Loss: 0.00001428\n",
      "Epoch: 8930/20000, Loss: 0.00001414\n",
      "Epoch: 8940/20000, Loss: 0.00001400\n",
      "Epoch: 8950/20000, Loss: 0.00001386\n",
      "Epoch: 8960/20000, Loss: 0.00001372\n",
      "Epoch: 8970/20000, Loss: 0.00001359\n",
      "Epoch: 8980/20000, Loss: 0.00001346\n",
      "Epoch: 8990/20000, Loss: 0.00001341\n",
      "Epoch: 9000/20000, Loss: 0.00001319\n",
      "Epoch: 9010/20000, Loss: 0.00001307\n",
      "Epoch: 9020/20000, Loss: 0.00001294\n",
      "Epoch: 9030/20000, Loss: 0.00001281\n",
      "Epoch: 9040/20000, Loss: 0.00001268\n",
      "Epoch: 9050/20000, Loss: 0.00001256\n",
      "Epoch: 9060/20000, Loss: 0.00001243\n",
      "Epoch: 9070/20000, Loss: 0.00001231\n",
      "Epoch: 9080/20000, Loss: 0.00001219\n",
      "Epoch: 9090/20000, Loss: 0.00001207\n",
      "Epoch: 9100/20000, Loss: 0.00001195\n",
      "Epoch: 9110/20000, Loss: 0.00001183\n",
      "Epoch: 9120/20000, Loss: 0.00001172\n",
      "Epoch: 9130/20000, Loss: 0.00001160\n",
      "Epoch: 9140/20000, Loss: 0.00001149\n",
      "Epoch: 9150/20000, Loss: 0.00001137\n",
      "Epoch: 9160/20000, Loss: 0.00001126\n",
      "Epoch: 9170/20000, Loss: 0.00001115\n",
      "Epoch: 9180/20000, Loss: 0.00001104\n",
      "Epoch: 9190/20000, Loss: 0.00001094\n",
      "Epoch: 9200/20000, Loss: 0.00001087\n",
      "Epoch: 9210/20000, Loss: 0.00001072\n",
      "Epoch: 9220/20000, Loss: 0.00001062\n",
      "Epoch: 9230/20000, Loss: 0.00001051\n",
      "Epoch: 9240/20000, Loss: 0.00001041\n",
      "Epoch: 9250/20000, Loss: 0.00001030\n",
      "Epoch: 9260/20000, Loss: 0.00001020\n",
      "Epoch: 9270/20000, Loss: 0.00001010\n",
      "Epoch: 9280/20000, Loss: 0.00001000\n",
      "Epoch: 9290/20000, Loss: 0.00000990\n",
      "Epoch: 9300/20000, Loss: 0.00000980\n",
      "Epoch: 9310/20000, Loss: 0.00000971\n",
      "Epoch: 9320/20000, Loss: 0.00000961\n",
      "Epoch: 9330/20000, Loss: 0.00000952\n",
      "Epoch: 9340/20000, Loss: 0.00000942\n",
      "Epoch: 9350/20000, Loss: 0.00000933\n",
      "Epoch: 9360/20000, Loss: 0.00000924\n",
      "Epoch: 9370/20000, Loss: 0.00000915\n",
      "Epoch: 9380/20000, Loss: 0.00000906\n",
      "Epoch: 9390/20000, Loss: 0.00000901\n",
      "Epoch: 9400/20000, Loss: 0.00000891\n",
      "Epoch: 9410/20000, Loss: 0.00000881\n",
      "Epoch: 9420/20000, Loss: 0.00000871\n",
      "Epoch: 9430/20000, Loss: 0.00000862\n",
      "Epoch: 9440/20000, Loss: 0.00000853\n",
      "Epoch: 9450/20000, Loss: 0.00000845\n",
      "Epoch: 9460/20000, Loss: 0.00000837\n",
      "Epoch: 9470/20000, Loss: 0.00000828\n",
      "Epoch: 9480/20000, Loss: 0.00000820\n",
      "Epoch: 9490/20000, Loss: 0.00000812\n",
      "Epoch: 9500/20000, Loss: 0.00000804\n",
      "Epoch: 9510/20000, Loss: 0.00000796\n",
      "Epoch: 9520/20000, Loss: 0.00000788\n",
      "Epoch: 9530/20000, Loss: 0.00000781\n",
      "Epoch: 9540/20000, Loss: 0.00000773\n",
      "Epoch: 9550/20000, Loss: 0.00000765\n",
      "Epoch: 9560/20000, Loss: 0.00000758\n",
      "Epoch: 9570/20000, Loss: 0.00000751\n",
      "Epoch: 9580/20000, Loss: 0.00000744\n",
      "Epoch: 9590/20000, Loss: 0.00000738\n",
      "Epoch: 9600/20000, Loss: 0.00000728\n",
      "Epoch: 9610/20000, Loss: 0.00000721\n",
      "Epoch: 9620/20000, Loss: 0.00000714\n",
      "Epoch: 9630/20000, Loss: 0.00000707\n",
      "Epoch: 9640/20000, Loss: 0.00000700\n",
      "Epoch: 9650/20000, Loss: 0.00000693\n",
      "Epoch: 9660/20000, Loss: 0.00000686\n",
      "Epoch: 9670/20000, Loss: 0.00000679\n",
      "Epoch: 9680/20000, Loss: 0.00000673\n",
      "Epoch: 9690/20000, Loss: 0.00000666\n",
      "Epoch: 9700/20000, Loss: 0.00000659\n",
      "Epoch: 9710/20000, Loss: 0.00000653\n",
      "Epoch: 9720/20000, Loss: 0.00000646\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 9730/20000, Loss: 0.00000641\n",
      "Epoch: 9740/20000, Loss: 0.00000641\n",
      "Epoch: 9750/20000, Loss: 0.00000629\n",
      "Epoch: 9760/20000, Loss: 0.00000622\n",
      "Epoch: 9770/20000, Loss: 0.00000616\n",
      "Epoch: 9780/20000, Loss: 0.00000609\n",
      "Epoch: 9790/20000, Loss: 0.00000603\n",
      "Epoch: 9800/20000, Loss: 0.00000597\n",
      "Epoch: 9810/20000, Loss: 0.00000591\n",
      "Epoch: 9820/20000, Loss: 0.00000585\n",
      "Epoch: 9830/20000, Loss: 0.00000580\n",
      "Epoch: 9840/20000, Loss: 0.00000574\n",
      "Epoch: 9850/20000, Loss: 0.00000568\n",
      "Epoch: 9860/20000, Loss: 0.00000563\n",
      "Epoch: 9870/20000, Loss: 0.00000557\n",
      "Epoch: 9880/20000, Loss: 0.00000552\n",
      "Epoch: 9890/20000, Loss: 0.00000546\n",
      "Epoch: 9900/20000, Loss: 0.00000542\n",
      "Epoch: 9910/20000, Loss: 0.00000543\n",
      "Epoch: 9920/20000, Loss: 0.00000536\n",
      "Epoch: 9930/20000, Loss: 0.00000526\n",
      "Epoch: 9940/20000, Loss: 0.00000520\n",
      "Epoch: 9950/20000, Loss: 0.00000515\n",
      "Epoch: 9960/20000, Loss: 0.00000510\n",
      "Epoch: 9970/20000, Loss: 0.00000505\n",
      "Epoch: 9980/20000, Loss: 0.00000500\n",
      "Epoch: 9990/20000, Loss: 0.00000495\n",
      "Epoch: 10000/20000, Loss: 0.00000490\n",
      "Epoch: 10010/20000, Loss: 0.00000485\n",
      "Epoch: 10020/20000, Loss: 0.00000480\n",
      "Epoch: 10030/20000, Loss: 0.00000476\n",
      "Epoch: 10040/20000, Loss: 0.00000471\n",
      "Epoch: 10050/20000, Loss: 0.00000466\n",
      "Epoch: 10060/20000, Loss: 0.00000462\n",
      "Epoch: 10070/20000, Loss: 0.00000457\n",
      "Epoch: 10080/20000, Loss: 0.00000453\n",
      "Epoch: 10090/20000, Loss: 0.00000452\n",
      "Epoch: 10100/20000, Loss: 0.00000446\n",
      "Epoch: 10110/20000, Loss: 0.00000440\n",
      "Epoch: 10120/20000, Loss: 0.00000435\n",
      "Epoch: 10130/20000, Loss: 0.00000431\n",
      "Epoch: 10140/20000, Loss: 0.00000427\n",
      "Epoch: 10150/20000, Loss: 0.00000424\n",
      "Epoch: 10160/20000, Loss: 0.00000419\n",
      "Epoch: 10170/20000, Loss: 0.00000414\n",
      "Epoch: 10180/20000, Loss: 0.00000410\n",
      "Epoch: 10190/20000, Loss: 0.00000406\n",
      "Epoch: 10200/20000, Loss: 0.00000403\n",
      "Epoch: 10210/20000, Loss: 0.00000400\n",
      "Epoch: 10220/20000, Loss: 0.00000395\n",
      "Epoch: 10230/20000, Loss: 0.00000391\n",
      "Epoch: 10240/20000, Loss: 0.00000387\n",
      "Epoch: 10250/20000, Loss: 0.00000383\n",
      "Epoch: 10260/20000, Loss: 0.00000380\n",
      "Epoch: 10270/20000, Loss: 0.00000377\n",
      "Epoch: 10280/20000, Loss: 0.00000373\n",
      "Epoch: 10290/20000, Loss: 0.00000368\n",
      "Epoch: 10300/20000, Loss: 0.00000365\n",
      "Epoch: 10310/20000, Loss: 0.00000361\n",
      "Epoch: 10320/20000, Loss: 0.00000358\n",
      "Epoch: 10330/20000, Loss: 0.00000358\n",
      "Epoch: 10340/20000, Loss: 0.00000351\n",
      "Epoch: 10350/20000, Loss: 0.00000347\n",
      "Epoch: 10360/20000, Loss: 0.00000344\n",
      "Epoch: 10370/20000, Loss: 0.00000340\n",
      "Epoch: 10380/20000, Loss: 0.00000337\n",
      "Epoch: 10390/20000, Loss: 0.00000334\n",
      "Epoch: 10400/20000, Loss: 0.00000331\n",
      "Epoch: 10410/20000, Loss: 0.00000329\n",
      "Epoch: 10420/20000, Loss: 0.00000325\n",
      "Epoch: 10430/20000, Loss: 0.00000322\n",
      "Epoch: 10440/20000, Loss: 0.00000319\n",
      "Epoch: 10450/20000, Loss: 0.00000316\n",
      "Epoch: 10460/20000, Loss: 0.00000312\n",
      "Epoch: 10470/20000, Loss: 0.00000309\n",
      "Epoch: 10480/20000, Loss: 0.00000306\n",
      "Epoch: 10490/20000, Loss: 0.00000304\n",
      "Epoch: 10500/20000, Loss: 0.00000304\n",
      "Epoch: 10510/20000, Loss: 0.00000298\n",
      "Epoch: 10520/20000, Loss: 0.00000294\n",
      "Epoch: 10530/20000, Loss: 0.00000291\n",
      "Epoch: 10540/20000, Loss: 0.00000289\n",
      "Epoch: 10550/20000, Loss: 0.00000286\n",
      "Epoch: 10560/20000, Loss: 0.00000283\n",
      "Epoch: 10570/20000, Loss: 0.00000280\n",
      "Epoch: 10580/20000, Loss: 0.00000280\n",
      "Epoch: 10590/20000, Loss: 0.00000279\n",
      "Epoch: 10600/20000, Loss: 0.00000274\n",
      "Epoch: 10610/20000, Loss: 0.00000270\n",
      "Epoch: 10620/20000, Loss: 0.00000267\n",
      "Epoch: 10630/20000, Loss: 0.00000265\n",
      "Epoch: 10640/20000, Loss: 0.00000262\n",
      "Epoch: 10650/20000, Loss: 0.00000259\n",
      "Epoch: 10660/20000, Loss: 0.00000257\n",
      "Epoch: 10670/20000, Loss: 0.00000255\n",
      "Epoch: 10680/20000, Loss: 0.00000253\n",
      "Epoch: 10690/20000, Loss: 0.00000252\n",
      "Epoch: 10700/20000, Loss: 0.00000248\n",
      "Epoch: 10710/20000, Loss: 0.00000245\n",
      "Epoch: 10720/20000, Loss: 0.00000244\n",
      "Epoch: 10730/20000, Loss: 0.00000241\n",
      "Epoch: 10740/20000, Loss: 0.00000238\n",
      "Epoch: 10750/20000, Loss: 0.00000236\n",
      "Epoch: 10760/20000, Loss: 0.00000234\n",
      "Epoch: 10770/20000, Loss: 0.00000231\n",
      "Epoch: 10780/20000, Loss: 0.00000229\n",
      "Epoch: 10790/20000, Loss: 0.00000227\n",
      "Epoch: 10800/20000, Loss: 0.00000225\n",
      "Epoch: 10810/20000, Loss: 0.00000231\n",
      "Epoch: 10820/20000, Loss: 0.00000223\n",
      "Epoch: 10830/20000, Loss: 0.00000220\n",
      "Epoch: 10840/20000, Loss: 0.00000216\n",
      "Epoch: 10850/20000, Loss: 0.00000214\n",
      "Epoch: 10860/20000, Loss: 0.00000212\n",
      "Epoch: 10870/20000, Loss: 0.00000210\n",
      "Epoch: 10880/20000, Loss: 0.00000208\n",
      "Epoch: 10890/20000, Loss: 0.00000206\n",
      "Epoch: 10900/20000, Loss: 0.00000205\n",
      "Epoch: 10910/20000, Loss: 0.00000206\n",
      "Epoch: 10920/20000, Loss: 0.00000202\n",
      "Epoch: 10930/20000, Loss: 0.00000199\n",
      "Epoch: 10940/20000, Loss: 0.00000197\n",
      "Epoch: 10950/20000, Loss: 0.00000195\n",
      "Epoch: 10960/20000, Loss: 0.00000197\n",
      "Epoch: 10970/20000, Loss: 0.00000192\n",
      "Epoch: 10980/20000, Loss: 0.00000191\n",
      "Epoch: 10990/20000, Loss: 0.00000188\n",
      "Epoch: 11000/20000, Loss: 0.00000186\n",
      "Epoch: 11010/20000, Loss: 0.00000184\n",
      "Epoch: 11020/20000, Loss: 0.00000183\n",
      "Epoch: 11030/20000, Loss: 0.00000185\n",
      "Epoch: 11040/20000, Loss: 0.00000180\n",
      "Epoch: 11050/20000, Loss: 0.00000178\n",
      "Epoch: 11060/20000, Loss: 0.00000176\n",
      "Epoch: 11070/20000, Loss: 0.00000174\n",
      "Epoch: 11080/20000, Loss: 0.00000173\n",
      "Epoch: 11090/20000, Loss: 0.00000171\n",
      "Epoch: 11100/20000, Loss: 0.00000170\n",
      "Epoch: 11110/20000, Loss: 0.00000168\n",
      "Epoch: 11120/20000, Loss: 0.00000171\n",
      "Epoch: 11130/20000, Loss: 0.00000167\n",
      "Epoch: 11140/20000, Loss: 0.00000165\n",
      "Epoch: 11150/20000, Loss: 0.00000162\n",
      "Epoch: 11160/20000, Loss: 0.00000161\n",
      "Epoch: 11170/20000, Loss: 0.00000159\n",
      "Epoch: 11180/20000, Loss: 0.00000158\n",
      "Epoch: 11190/20000, Loss: 0.00000156\n",
      "Epoch: 11200/20000, Loss: 0.00000155\n",
      "Epoch: 11210/20000, Loss: 0.00000155\n",
      "Epoch: 11220/20000, Loss: 0.00000152\n",
      "Epoch: 11230/20000, Loss: 0.00000152\n",
      "Epoch: 11240/20000, Loss: 0.00000149\n",
      "Epoch: 11250/20000, Loss: 0.00000148\n",
      "Epoch: 11260/20000, Loss: 0.00000147\n",
      "Epoch: 11270/20000, Loss: 0.00000145\n",
      "Epoch: 11280/20000, Loss: 0.00000145\n",
      "Epoch: 11290/20000, Loss: 0.00000147\n",
      "Epoch: 11300/20000, Loss: 0.00000143\n",
      "Epoch: 11310/20000, Loss: 0.00000141\n",
      "Epoch: 11320/20000, Loss: 0.00000139\n",
      "Epoch: 11330/20000, Loss: 0.00000138\n",
      "Epoch: 11340/20000, Loss: 0.00000136\n",
      "Epoch: 11350/20000, Loss: 0.00000135\n",
      "Epoch: 11360/20000, Loss: 0.00000134\n",
      "Epoch: 11370/20000, Loss: 0.00000133\n",
      "Epoch: 11380/20000, Loss: 0.00000132\n",
      "Epoch: 11390/20000, Loss: 0.00000137\n",
      "Epoch: 11400/20000, Loss: 0.00000130\n",
      "Epoch: 11410/20000, Loss: 0.00000129\n",
      "Epoch: 11420/20000, Loss: 0.00000127\n",
      "Epoch: 11430/20000, Loss: 0.00000126\n",
      "Epoch: 11440/20000, Loss: 0.00000125\n",
      "Epoch: 11450/20000, Loss: 0.00000124\n",
      "Epoch: 11460/20000, Loss: 0.00000122\n",
      "Epoch: 11470/20000, Loss: 0.00000121\n",
      "Epoch: 11480/20000, Loss: 0.00000120\n",
      "Epoch: 11490/20000, Loss: 0.00000120\n",
      "Epoch: 11500/20000, Loss: 0.00000121\n",
      "Epoch: 11510/20000, Loss: 0.00000119\n",
      "Epoch: 11520/20000, Loss: 0.00000117\n",
      "Epoch: 11530/20000, Loss: 0.00000115\n",
      "Epoch: 11540/20000, Loss: 0.00000114\n",
      "Epoch: 11550/20000, Loss: 0.00000113\n",
      "Epoch: 11560/20000, Loss: 0.00000112\n",
      "Epoch: 11570/20000, Loss: 0.00000111\n",
      "Epoch: 11580/20000, Loss: 0.00000112\n",
      "Epoch: 11590/20000, Loss: 0.00000111\n",
      "Epoch: 11600/20000, Loss: 0.00000109\n",
      "Epoch: 11610/20000, Loss: 0.00000108\n",
      "Epoch: 11620/20000, Loss: 0.00000107\n",
      "Epoch: 11630/20000, Loss: 0.00000106\n",
      "Epoch: 11640/20000, Loss: 0.00000106\n",
      "Epoch: 11650/20000, Loss: 0.00000104\n",
      "Epoch: 11660/20000, Loss: 0.00000103\n",
      "Epoch: 11670/20000, Loss: 0.00000103\n",
      "Epoch: 11680/20000, Loss: 0.00000102\n",
      "Epoch: 11690/20000, Loss: 0.00000102\n",
      "Epoch: 11700/20000, Loss: 0.00000100\n",
      "Epoch: 11710/20000, Loss: 0.00000099\n",
      "Epoch: 11720/20000, Loss: 0.00000098\n",
      "Epoch: 11730/20000, Loss: 0.00000097\n",
      "Epoch: 11740/20000, Loss: 0.00000102\n",
      "Epoch: 11750/20000, Loss: 0.00000096\n",
      "Epoch: 11760/20000, Loss: 0.00000095\n",
      "Epoch: 11770/20000, Loss: 0.00000094\n",
      "Epoch: 11780/20000, Loss: 0.00000093\n",
      "Epoch: 11790/20000, Loss: 0.00000092\n",
      "Epoch: 11800/20000, Loss: 0.00000091\n",
      "Epoch: 11810/20000, Loss: 0.00000091\n",
      "Epoch: 11820/20000, Loss: 0.00000090\n",
      "Epoch: 11830/20000, Loss: 0.00000089\n",
      "Epoch: 11840/20000, Loss: 0.00000092\n",
      "Epoch: 11850/20000, Loss: 0.00000092\n",
      "Epoch: 11860/20000, Loss: 0.00000088\n",
      "Epoch: 11870/20000, Loss: 0.00000087\n",
      "Epoch: 11880/20000, Loss: 0.00000086\n",
      "Epoch: 11890/20000, Loss: 0.00000085\n",
      "Epoch: 11900/20000, Loss: 0.00000084\n",
      "Epoch: 11910/20000, Loss: 0.00000083\n",
      "Epoch: 11920/20000, Loss: 0.00000083\n",
      "Epoch: 11930/20000, Loss: 0.00000082\n",
      "Epoch: 11940/20000, Loss: 0.00000081\n",
      "Epoch: 11950/20000, Loss: 0.00000081\n",
      "Epoch: 11960/20000, Loss: 0.00000081\n",
      "Epoch: 11970/20000, Loss: 0.00000085\n",
      "Epoch: 11980/20000, Loss: 0.00000079\n",
      "Epoch: 11990/20000, Loss: 0.00000079\n",
      "Epoch: 12000/20000, Loss: 0.00000077\n",
      "Epoch: 12010/20000, Loss: 0.00000077\n",
      "Epoch: 12020/20000, Loss: 0.00000076\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 12030/20000, Loss: 0.00000075\n",
      "Epoch: 12040/20000, Loss: 0.00000075\n",
      "Epoch: 12050/20000, Loss: 0.00000074\n",
      "Epoch: 12060/20000, Loss: 0.00000074\n",
      "Epoch: 12070/20000, Loss: 0.00000073\n",
      "Epoch: 12080/20000, Loss: 0.00000075\n",
      "Epoch: 12090/20000, Loss: 0.00000074\n",
      "Epoch: 12100/20000, Loss: 0.00000071\n",
      "Epoch: 12110/20000, Loss: 0.00000071\n",
      "Epoch: 12120/20000, Loss: 0.00000070\n",
      "Epoch: 12130/20000, Loss: 0.00000070\n",
      "Epoch: 12140/20000, Loss: 0.00000069\n",
      "Epoch: 12150/20000, Loss: 0.00000069\n",
      "Epoch: 12160/20000, Loss: 0.00000075\n",
      "Epoch: 12170/20000, Loss: 0.00000069\n",
      "Epoch: 12180/20000, Loss: 0.00000067\n",
      "Epoch: 12190/20000, Loss: 0.00000067\n",
      "Epoch: 12200/20000, Loss: 0.00000066\n",
      "Epoch: 12210/20000, Loss: 0.00000065\n",
      "Epoch: 12220/20000, Loss: 0.00000066\n",
      "Epoch: 12230/20000, Loss: 0.00000071\n",
      "Epoch: 12240/20000, Loss: 0.00000066\n",
      "Epoch: 12250/20000, Loss: 0.00000064\n",
      "Epoch: 12260/20000, Loss: 0.00000063\n",
      "Epoch: 12270/20000, Loss: 0.00000062\n",
      "Epoch: 12280/20000, Loss: 0.00000062\n",
      "Epoch: 12290/20000, Loss: 0.00000061\n",
      "Epoch: 12300/20000, Loss: 0.00000061\n",
      "Epoch: 12310/20000, Loss: 0.00000061\n",
      "Epoch: 12320/20000, Loss: 0.00000065\n",
      "Epoch: 12330/20000, Loss: 0.00000061\n",
      "Epoch: 12340/20000, Loss: 0.00000059\n",
      "Epoch: 12350/20000, Loss: 0.00000058\n",
      "Epoch: 12360/20000, Loss: 0.00000058\n",
      "Epoch: 12370/20000, Loss: 0.00000061\n",
      "Epoch: 12380/20000, Loss: 0.00000057\n",
      "Epoch: 12390/20000, Loss: 0.00000057\n",
      "Epoch: 12400/20000, Loss: 0.00000056\n",
      "Epoch: 12410/20000, Loss: 0.00000056\n",
      "Epoch: 12420/20000, Loss: 0.00000055\n",
      "Epoch: 12430/20000, Loss: 0.00000055\n",
      "Epoch: 12440/20000, Loss: 0.00000056\n",
      "Epoch: 12450/20000, Loss: 0.00000056\n",
      "Epoch: 12460/20000, Loss: 0.00000055\n",
      "Epoch: 12470/20000, Loss: 0.00000053\n",
      "Epoch: 12480/20000, Loss: 0.00000053\n",
      "Epoch: 12490/20000, Loss: 0.00000052\n",
      "Epoch: 12500/20000, Loss: 0.00000052\n",
      "Epoch: 12510/20000, Loss: 0.00000052\n",
      "Epoch: 12520/20000, Loss: 0.00000052\n",
      "Epoch: 12530/20000, Loss: 0.00000058\n",
      "Epoch: 12540/20000, Loss: 0.00000052\n",
      "Epoch: 12550/20000, Loss: 0.00000050\n",
      "Epoch: 12560/20000, Loss: 0.00000050\n",
      "Epoch: 12570/20000, Loss: 0.00000050\n",
      "Epoch: 12580/20000, Loss: 0.00000051\n",
      "Epoch: 12590/20000, Loss: 0.00000049\n",
      "Epoch: 12600/20000, Loss: 0.00000049\n",
      "Epoch: 12610/20000, Loss: 0.00000048\n",
      "Epoch: 12620/20000, Loss: 0.00000048\n",
      "Epoch: 12630/20000, Loss: 0.00000047\n",
      "Epoch: 12640/20000, Loss: 0.00000049\n",
      "Epoch: 12650/20000, Loss: 0.00000049\n",
      "Epoch: 12660/20000, Loss: 0.00000046\n",
      "Epoch: 12670/20000, Loss: 0.00000046\n",
      "Epoch: 12680/20000, Loss: 0.00000046\n",
      "Epoch: 12690/20000, Loss: 0.00000045\n",
      "Epoch: 12700/20000, Loss: 0.00000045\n",
      "Epoch: 12710/20000, Loss: 0.00000044\n",
      "Epoch: 12720/20000, Loss: 0.00000044\n",
      "Epoch: 12730/20000, Loss: 0.00000045\n",
      "Epoch: 12740/20000, Loss: 0.00000055\n",
      "Epoch: 12750/20000, Loss: 0.00000047\n",
      "Epoch: 12760/20000, Loss: 0.00000043\n",
      "Epoch: 12770/20000, Loss: 0.00000043\n",
      "Epoch: 12780/20000, Loss: 0.00000042\n",
      "Epoch: 12790/20000, Loss: 0.00000042\n",
      "Epoch: 12800/20000, Loss: 0.00000042\n",
      "Epoch: 12810/20000, Loss: 0.00000041\n",
      "Epoch: 12820/20000, Loss: 0.00000041\n",
      "Epoch: 12830/20000, Loss: 0.00000041\n",
      "Epoch: 12840/20000, Loss: 0.00000040\n",
      "Epoch: 12850/20000, Loss: 0.00000040\n",
      "Epoch: 12860/20000, Loss: 0.00000040\n",
      "Epoch: 12870/20000, Loss: 0.00000040\n",
      "Epoch: 12880/20000, Loss: 0.00000049\n",
      "Epoch: 12890/20000, Loss: 0.00000041\n",
      "Epoch: 12900/20000, Loss: 0.00000039\n",
      "Epoch: 12910/20000, Loss: 0.00000041\n",
      "Epoch: 12920/20000, Loss: 0.00000038\n",
      "Epoch: 12930/20000, Loss: 0.00000038\n",
      "Epoch: 12940/20000, Loss: 0.00000038\n",
      "Epoch: 12950/20000, Loss: 0.00000037\n",
      "Epoch: 12960/20000, Loss: 0.00000037\n",
      "Epoch: 12970/20000, Loss: 0.00000037\n",
      "Epoch: 12980/20000, Loss: 0.00000036\n",
      "Epoch: 12990/20000, Loss: 0.00000036\n",
      "Epoch: 13000/20000, Loss: 0.00000037\n",
      "Epoch: 13010/20000, Loss: 0.00000042\n",
      "Epoch: 13020/20000, Loss: 0.00000038\n",
      "Epoch: 13030/20000, Loss: 0.00000037\n",
      "Epoch: 13040/20000, Loss: 0.00000035\n",
      "Epoch: 13050/20000, Loss: 0.00000035\n",
      "Epoch: 13060/20000, Loss: 0.00000035\n",
      "Epoch: 13070/20000, Loss: 0.00000034\n",
      "Epoch: 13080/20000, Loss: 0.00000034\n",
      "Epoch: 13090/20000, Loss: 0.00000036\n",
      "Epoch: 13100/20000, Loss: 0.00000035\n",
      "Epoch: 13110/20000, Loss: 0.00000034\n",
      "Epoch: 13120/20000, Loss: 0.00000033\n",
      "Epoch: 13130/20000, Loss: 0.00000033\n",
      "Epoch: 13140/20000, Loss: 0.00000033\n",
      "Epoch: 13150/20000, Loss: 0.00000036\n",
      "Epoch: 13160/20000, Loss: 0.00000033\n",
      "Epoch: 13170/20000, Loss: 0.00000034\n",
      "Epoch: 13180/20000, Loss: 0.00000032\n",
      "Epoch: 13190/20000, Loss: 0.00000032\n",
      "Epoch: 13200/20000, Loss: 0.00000031\n",
      "Epoch: 13210/20000, Loss: 0.00000031\n",
      "Epoch: 13220/20000, Loss: 0.00000033\n",
      "Epoch: 13230/20000, Loss: 0.00000032\n",
      "Epoch: 13240/20000, Loss: 0.00000033\n",
      "Epoch: 13250/20000, Loss: 0.00000030\n",
      "Epoch: 13260/20000, Loss: 0.00000030\n",
      "Epoch: 13270/20000, Loss: 0.00000030\n",
      "Epoch: 13280/20000, Loss: 0.00000030\n",
      "Epoch: 13290/20000, Loss: 0.00000029\n",
      "Epoch: 13300/20000, Loss: 0.00000029\n",
      "Epoch: 13310/20000, Loss: 0.00000029\n",
      "Epoch: 13320/20000, Loss: 0.00000029\n",
      "Epoch: 13330/20000, Loss: 0.00000037\n",
      "Epoch: 13340/20000, Loss: 0.00000031\n",
      "Epoch: 13350/20000, Loss: 0.00000028\n",
      "Epoch: 13360/20000, Loss: 0.00000028\n",
      "Epoch: 13370/20000, Loss: 0.00000028\n",
      "Epoch: 13380/20000, Loss: 0.00000028\n",
      "Epoch: 13390/20000, Loss: 0.00000027\n",
      "Epoch: 13400/20000, Loss: 0.00000027\n",
      "Epoch: 13410/20000, Loss: 0.00000027\n",
      "Epoch: 13420/20000, Loss: 0.00000027\n",
      "Epoch: 13430/20000, Loss: 0.00000027\n",
      "Epoch: 13440/20000, Loss: 0.00000037\n",
      "Epoch: 13450/20000, Loss: 0.00000031\n",
      "Epoch: 13460/20000, Loss: 0.00000027\n",
      "Epoch: 13470/20000, Loss: 0.00000026\n",
      "Epoch: 13480/20000, Loss: 0.00000026\n",
      "Epoch: 13490/20000, Loss: 0.00000028\n",
      "Epoch: 13500/20000, Loss: 0.00000026\n",
      "Epoch: 13510/20000, Loss: 0.00000025\n",
      "Epoch: 13520/20000, Loss: 0.00000025\n",
      "Epoch: 13530/20000, Loss: 0.00000025\n",
      "Epoch: 13540/20000, Loss: 0.00000025\n",
      "Epoch: 13550/20000, Loss: 0.00000025\n",
      "Epoch: 13560/20000, Loss: 0.00000025\n",
      "Epoch: 13570/20000, Loss: 0.00000024\n",
      "Epoch: 13580/20000, Loss: 0.00000024\n",
      "Epoch: 13590/20000, Loss: 0.00000028\n",
      "Epoch: 13600/20000, Loss: 0.00000030\n",
      "Epoch: 13610/20000, Loss: 0.00000026\n",
      "Epoch: 13620/20000, Loss: 0.00000025\n",
      "Epoch: 13630/20000, Loss: 0.00000024\n",
      "Epoch: 13640/20000, Loss: 0.00000023\n",
      "Epoch: 13650/20000, Loss: 0.00000023\n",
      "Epoch: 13660/20000, Loss: 0.00000023\n",
      "Epoch: 13670/20000, Loss: 0.00000023\n",
      "Epoch: 13680/20000, Loss: 0.00000023\n",
      "Epoch: 13690/20000, Loss: 0.00000023\n",
      "Epoch: 13700/20000, Loss: 0.00000023\n",
      "Epoch: 13710/20000, Loss: 0.00000024\n",
      "Epoch: 13720/20000, Loss: 0.00000028\n",
      "Epoch: 13730/20000, Loss: 0.00000022\n",
      "Epoch: 13740/20000, Loss: 0.00000024\n",
      "Epoch: 13750/20000, Loss: 0.00000022\n",
      "Epoch: 13760/20000, Loss: 0.00000022\n",
      "Epoch: 13770/20000, Loss: 0.00000022\n",
      "Epoch: 13780/20000, Loss: 0.00000021\n",
      "Epoch: 13790/20000, Loss: 0.00000021\n",
      "Epoch: 13800/20000, Loss: 0.00000021\n",
      "Epoch: 13810/20000, Loss: 0.00000021\n",
      "Epoch: 13820/20000, Loss: 0.00000021\n",
      "Epoch: 13830/20000, Loss: 0.00000021\n",
      "Epoch: 13840/20000, Loss: 0.00000021\n",
      "Epoch: 13850/20000, Loss: 0.00000021\n",
      "Epoch: 13860/20000, Loss: 0.00000026\n",
      "Epoch: 13870/20000, Loss: 0.00000026\n",
      "Epoch: 13880/20000, Loss: 0.00000021\n",
      "Epoch: 13890/20000, Loss: 0.00000020\n",
      "Epoch: 13900/20000, Loss: 0.00000020\n",
      "Epoch: 13910/20000, Loss: 0.00000020\n",
      "Epoch: 13920/20000, Loss: 0.00000020\n",
      "Epoch: 13930/20000, Loss: 0.00000020\n",
      "Epoch: 13940/20000, Loss: 0.00000020\n",
      "Epoch: 13950/20000, Loss: 0.00000025\n",
      "Epoch: 13960/20000, Loss: 0.00000020\n",
      "Epoch: 13970/20000, Loss: 0.00000020\n",
      "Epoch: 13980/20000, Loss: 0.00000019\n",
      "Epoch: 13990/20000, Loss: 0.00000019\n",
      "Epoch: 14000/20000, Loss: 0.00000019\n",
      "Epoch: 14010/20000, Loss: 0.00000019\n",
      "Epoch: 14020/20000, Loss: 0.00000018\n",
      "Epoch: 14030/20000, Loss: 0.00000018\n",
      "Epoch: 14040/20000, Loss: 0.00000021\n",
      "Epoch: 14050/20000, Loss: 0.00000019\n",
      "Epoch: 14060/20000, Loss: 0.00000018\n",
      "Epoch: 14070/20000, Loss: 0.00000018\n",
      "Epoch: 14080/20000, Loss: 0.00000018\n",
      "Epoch: 14090/20000, Loss: 0.00000019\n",
      "Epoch: 14100/20000, Loss: 0.00000022\n",
      "Epoch: 14110/20000, Loss: 0.00000018\n",
      "Epoch: 14120/20000, Loss: 0.00000018\n",
      "Epoch: 14130/20000, Loss: 0.00000017\n",
      "Epoch: 14140/20000, Loss: 0.00000017\n",
      "Epoch: 14150/20000, Loss: 0.00000017\n",
      "Epoch: 14160/20000, Loss: 0.00000017\n",
      "Epoch: 14170/20000, Loss: 0.00000017\n",
      "Epoch: 14180/20000, Loss: 0.00000022\n",
      "Epoch: 14190/20000, Loss: 0.00000023\n",
      "Epoch: 14200/20000, Loss: 0.00000018\n",
      "Epoch: 14210/20000, Loss: 0.00000017\n",
      "Epoch: 14220/20000, Loss: 0.00000017\n",
      "Epoch: 14230/20000, Loss: 0.00000016\n",
      "Epoch: 14240/20000, Loss: 0.00000016\n",
      "Epoch: 14250/20000, Loss: 0.00000016\n",
      "Epoch: 14260/20000, Loss: 0.00000016\n",
      "Epoch: 14270/20000, Loss: 0.00000016\n",
      "Epoch: 14280/20000, Loss: 0.00000016\n",
      "Epoch: 14290/20000, Loss: 0.00000020\n",
      "Epoch: 14300/20000, Loss: 0.00000022\n",
      "Epoch: 14310/20000, Loss: 0.00000019\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 14320/20000, Loss: 0.00000016\n",
      "Epoch: 14330/20000, Loss: 0.00000016\n",
      "Epoch: 14340/20000, Loss: 0.00000016\n",
      "Epoch: 14350/20000, Loss: 0.00000015\n",
      "Epoch: 14360/20000, Loss: 0.00000015\n",
      "Epoch: 14370/20000, Loss: 0.00000015\n",
      "Epoch: 14380/20000, Loss: 0.00000015\n",
      "Epoch: 14390/20000, Loss: 0.00000015\n",
      "Epoch: 14400/20000, Loss: 0.00000015\n",
      "Epoch: 14410/20000, Loss: 0.00000015\n",
      "Epoch: 14420/20000, Loss: 0.00000019\n",
      "Epoch: 14430/20000, Loss: 0.00000015\n",
      "Epoch: 14440/20000, Loss: 0.00000016\n",
      "Epoch: 14450/20000, Loss: 0.00000017\n",
      "Epoch: 14460/20000, Loss: 0.00000015\n",
      "Epoch: 14470/20000, Loss: 0.00000015\n",
      "Epoch: 14480/20000, Loss: 0.00000015\n",
      "Epoch: 14490/20000, Loss: 0.00000015\n",
      "Epoch: 14500/20000, Loss: 0.00000015\n",
      "Epoch: 14510/20000, Loss: 0.00000014\n",
      "Epoch: 14520/20000, Loss: 0.00000014\n",
      "Epoch: 14530/20000, Loss: 0.00000014\n",
      "Epoch: 14540/20000, Loss: 0.00000015\n",
      "Epoch: 14550/20000, Loss: 0.00000015\n",
      "Epoch: 14560/20000, Loss: 0.00000016\n",
      "Epoch: 14570/20000, Loss: 0.00000015\n",
      "Epoch: 14580/20000, Loss: 0.00000014\n",
      "Epoch: 14590/20000, Loss: 0.00000013\n",
      "Epoch: 14600/20000, Loss: 0.00000014\n",
      "Epoch: 14610/20000, Loss: 0.00000014\n",
      "Epoch: 14620/20000, Loss: 0.00000016\n",
      "Epoch: 14630/20000, Loss: 0.00000016\n",
      "Epoch: 14640/20000, Loss: 0.00000015\n",
      "Epoch: 14650/20000, Loss: 0.00000014\n",
      "Epoch: 14660/20000, Loss: 0.00000013\n",
      "Epoch: 14670/20000, Loss: 0.00000013\n",
      "Epoch: 14680/20000, Loss: 0.00000013\n",
      "Epoch: 14690/20000, Loss: 0.00000015\n",
      "Epoch: 14700/20000, Loss: 0.00000014\n",
      "Epoch: 14710/20000, Loss: 0.00000013\n",
      "Epoch: 14720/20000, Loss: 0.00000013\n",
      "Epoch: 14730/20000, Loss: 0.00000013\n",
      "Epoch: 14740/20000, Loss: 0.00000013\n",
      "Epoch: 14750/20000, Loss: 0.00000013\n",
      "Epoch: 14760/20000, Loss: 0.00000020\n",
      "Epoch: 14770/20000, Loss: 0.00000015\n",
      "Epoch: 14780/20000, Loss: 0.00000013\n",
      "Epoch: 14790/20000, Loss: 0.00000012\n",
      "Epoch: 14800/20000, Loss: 0.00000013\n",
      "Epoch: 14810/20000, Loss: 0.00000015\n",
      "Epoch: 14820/20000, Loss: 0.00000012\n",
      "Epoch: 14830/20000, Loss: 0.00000012\n",
      "Epoch: 14840/20000, Loss: 0.00000012\n",
      "Epoch: 14850/20000, Loss: 0.00000012\n",
      "Epoch: 14860/20000, Loss: 0.00000012\n",
      "Epoch: 14870/20000, Loss: 0.00000012\n",
      "Epoch: 14880/20000, Loss: 0.00000018\n",
      "Epoch: 14890/20000, Loss: 0.00000015\n",
      "Epoch: 14900/20000, Loss: 0.00000013\n",
      "Epoch: 14910/20000, Loss: 0.00000012\n",
      "Epoch: 14920/20000, Loss: 0.00000012\n",
      "Epoch: 14930/20000, Loss: 0.00000011\n",
      "Epoch: 14940/20000, Loss: 0.00000011\n",
      "Epoch: 14950/20000, Loss: 0.00000011\n",
      "Epoch: 14960/20000, Loss: 0.00000011\n",
      "Epoch: 14970/20000, Loss: 0.00000011\n",
      "Epoch: 14980/20000, Loss: 0.00000011\n",
      "Epoch: 14990/20000, Loss: 0.00000011\n",
      "Epoch: 15000/20000, Loss: 0.00000012\n",
      "Epoch: 15010/20000, Loss: 0.00000021\n",
      "Epoch: 15020/20000, Loss: 0.00000018\n",
      "Epoch: 15030/20000, Loss: 0.00000013\n",
      "Epoch: 15040/20000, Loss: 0.00000013\n",
      "Epoch: 15050/20000, Loss: 0.00000011\n",
      "Epoch: 15060/20000, Loss: 0.00000011\n",
      "Epoch: 15070/20000, Loss: 0.00000011\n",
      "Epoch: 15080/20000, Loss: 0.00000011\n",
      "Epoch: 15090/20000, Loss: 0.00000010\n",
      "Epoch: 15100/20000, Loss: 0.00000010\n",
      "Epoch: 15110/20000, Loss: 0.00000010\n",
      "Epoch: 15120/20000, Loss: 0.00000010\n",
      "Epoch: 15130/20000, Loss: 0.00000010\n",
      "Epoch: 15140/20000, Loss: 0.00000010\n",
      "Epoch: 15150/20000, Loss: 0.00000010\n",
      "Epoch: 15160/20000, Loss: 0.00000010\n",
      "Epoch: 15170/20000, Loss: 0.00000010\n",
      "Epoch: 15180/20000, Loss: 0.00000015\n",
      "Epoch: 15190/20000, Loss: 0.00000017\n",
      "Epoch: 15200/20000, Loss: 0.00000012\n",
      "Epoch: 15210/20000, Loss: 0.00000011\n",
      "Epoch: 15220/20000, Loss: 0.00000010\n",
      "Epoch: 15230/20000, Loss: 0.00000010\n",
      "Epoch: 15240/20000, Loss: 0.00000010\n",
      "Epoch: 15250/20000, Loss: 0.00000010\n",
      "Epoch: 15260/20000, Loss: 0.00000010\n",
      "Epoch: 15270/20000, Loss: 0.00000010\n",
      "Epoch: 15280/20000, Loss: 0.00000012\n",
      "Epoch: 15290/20000, Loss: 0.00000012\n",
      "Epoch: 15300/20000, Loss: 0.00000010\n",
      "Epoch: 15310/20000, Loss: 0.00000010\n",
      "Epoch: 15320/20000, Loss: 0.00000009\n",
      "Epoch: 15330/20000, Loss: 0.00000009\n",
      "Epoch: 15340/20000, Loss: 0.00000009\n",
      "Epoch: 15350/20000, Loss: 0.00000009\n",
      "Epoch: 15360/20000, Loss: 0.00000009\n",
      "Epoch: 15370/20000, Loss: 0.00000009\n",
      "Epoch: 15380/20000, Loss: 0.00000009\n",
      "Epoch: 15390/20000, Loss: 0.00000009\n",
      "Epoch: 15400/20000, Loss: 0.00000009\n",
      "Epoch: 15410/20000, Loss: 0.00000021\n",
      "Epoch: 15420/20000, Loss: 0.00000014\n",
      "Epoch: 15430/20000, Loss: 0.00000012\n",
      "Epoch: 15440/20000, Loss: 0.00000010\n",
      "Epoch: 15450/20000, Loss: 0.00000009\n",
      "Epoch: 15460/20000, Loss: 0.00000009\n",
      "Epoch: 15470/20000, Loss: 0.00000009\n",
      "Epoch: 15480/20000, Loss: 0.00000009\n",
      "Epoch: 15490/20000, Loss: 0.00000009\n",
      "Epoch: 15500/20000, Loss: 0.00000009\n",
      "Epoch: 15510/20000, Loss: 0.00000009\n",
      "Epoch: 15520/20000, Loss: 0.00000009\n",
      "Epoch: 15530/20000, Loss: 0.00000009\n",
      "Epoch: 15540/20000, Loss: 0.00000009\n",
      "Epoch: 15550/20000, Loss: 0.00000008\n",
      "Epoch: 15560/20000, Loss: 0.00000008\n",
      "Epoch: 15570/20000, Loss: 0.00000008\n",
      "Epoch: 15580/20000, Loss: 0.00000009\n",
      "Epoch: 15590/20000, Loss: 0.00000017\n",
      "Epoch: 15600/20000, Loss: 0.00000011\n",
      "Epoch: 15610/20000, Loss: 0.00000011\n",
      "Epoch: 15620/20000, Loss: 0.00000009\n",
      "Epoch: 15630/20000, Loss: 0.00000009\n",
      "Epoch: 15640/20000, Loss: 0.00000008\n",
      "Epoch: 15650/20000, Loss: 0.00000008\n",
      "Epoch: 15660/20000, Loss: 0.00000008\n",
      "Epoch: 15670/20000, Loss: 0.00000008\n",
      "Epoch: 15680/20000, Loss: 0.00000008\n",
      "Epoch: 15690/20000, Loss: 0.00000008\n",
      "Epoch: 15700/20000, Loss: 0.00000008\n",
      "Epoch: 15710/20000, Loss: 0.00000008\n",
      "Epoch: 15720/20000, Loss: 0.00000008\n",
      "Epoch: 15730/20000, Loss: 0.00000010\n",
      "Epoch: 15740/20000, Loss: 0.00000011\n",
      "Epoch: 15750/20000, Loss: 0.00000011\n",
      "Epoch: 15760/20000, Loss: 0.00000008\n",
      "Epoch: 15770/20000, Loss: 0.00000008\n",
      "Epoch: 15780/20000, Loss: 0.00000008\n",
      "Epoch: 15790/20000, Loss: 0.00000008\n",
      "Epoch: 15800/20000, Loss: 0.00000008\n",
      "Epoch: 15810/20000, Loss: 0.00000008\n",
      "Epoch: 15820/20000, Loss: 0.00000009\n",
      "Epoch: 15830/20000, Loss: 0.00000018\n",
      "Epoch: 15840/20000, Loss: 0.00000011\n",
      "Epoch: 15850/20000, Loss: 0.00000008\n",
      "Epoch: 15860/20000, Loss: 0.00000008\n",
      "Epoch: 15870/20000, Loss: 0.00000007\n",
      "Epoch: 15880/20000, Loss: 0.00000007\n",
      "Epoch: 15890/20000, Loss: 0.00000007\n",
      "Epoch: 15900/20000, Loss: 0.00000007\n",
      "Epoch: 15910/20000, Loss: 0.00000007\n",
      "Epoch: 15920/20000, Loss: 0.00000007\n",
      "Epoch: 15930/20000, Loss: 0.00000008\n",
      "Epoch: 15940/20000, Loss: 0.00000016\n",
      "Epoch: 15950/20000, Loss: 0.00000014\n",
      "Epoch: 15960/20000, Loss: 0.00000010\n",
      "Epoch: 15970/20000, Loss: 0.00000008\n",
      "Epoch: 15980/20000, Loss: 0.00000007\n",
      "Epoch: 15990/20000, Loss: 0.00000007\n",
      "Epoch: 16000/20000, Loss: 0.00000007\n",
      "Epoch: 16010/20000, Loss: 0.00000007\n",
      "Epoch: 16020/20000, Loss: 0.00000007\n",
      "Epoch: 16030/20000, Loss: 0.00000007\n",
      "Epoch: 16040/20000, Loss: 0.00000008\n",
      "Epoch: 16050/20000, Loss: 0.00000016\n",
      "Epoch: 16060/20000, Loss: 0.00000010\n",
      "Epoch: 16070/20000, Loss: 0.00000008\n",
      "Epoch: 16080/20000, Loss: 0.00000007\n",
      "Epoch: 16090/20000, Loss: 0.00000007\n",
      "Epoch: 16100/20000, Loss: 0.00000007\n",
      "Epoch: 16110/20000, Loss: 0.00000008\n",
      "Epoch: 16120/20000, Loss: 0.00000011\n",
      "Epoch: 16130/20000, Loss: 0.00000007\n",
      "Epoch: 16140/20000, Loss: 0.00000007\n",
      "Epoch: 16150/20000, Loss: 0.00000007\n",
      "Epoch: 16160/20000, Loss: 0.00000007\n",
      "Epoch: 16170/20000, Loss: 0.00000008\n",
      "Epoch: 16180/20000, Loss: 0.00000013\n",
      "Epoch: 16190/20000, Loss: 0.00000009\n",
      "Epoch: 16200/20000, Loss: 0.00000007\n",
      "Epoch: 16210/20000, Loss: 0.00000007\n",
      "Epoch: 16220/20000, Loss: 0.00000007\n",
      "Epoch: 16230/20000, Loss: 0.00000008\n",
      "Epoch: 16240/20000, Loss: 0.00000009\n",
      "Epoch: 16250/20000, Loss: 0.00000007\n",
      "Epoch: 16260/20000, Loss: 0.00000007\n",
      "Epoch: 16270/20000, Loss: 0.00000007\n",
      "Epoch: 16280/20000, Loss: 0.00000009\n",
      "Epoch: 16290/20000, Loss: 0.00000011\n",
      "Epoch: 16300/20000, Loss: 0.00000008\n",
      "Epoch: 16310/20000, Loss: 0.00000007\n",
      "Epoch: 16320/20000, Loss: 0.00000006\n",
      "Epoch: 16330/20000, Loss: 0.00000006\n",
      "Epoch: 16340/20000, Loss: 0.00000007\n",
      "Epoch: 16350/20000, Loss: 0.00000010\n",
      "Epoch: 16360/20000, Loss: 0.00000006\n",
      "Epoch: 16370/20000, Loss: 0.00000008\n",
      "Epoch: 16380/20000, Loss: 0.00000011\n",
      "Epoch: 16390/20000, Loss: 0.00000008\n",
      "Epoch: 16400/20000, Loss: 0.00000006\n",
      "Epoch: 16410/20000, Loss: 0.00000006\n",
      "Epoch: 16420/20000, Loss: 0.00000006\n",
      "Epoch: 16430/20000, Loss: 0.00000006\n",
      "Epoch: 16440/20000, Loss: 0.00000006\n",
      "Epoch: 16450/20000, Loss: 0.00000012\n",
      "Epoch: 16460/20000, Loss: 0.00000009\n",
      "Epoch: 16470/20000, Loss: 0.00000007\n",
      "Epoch: 16480/20000, Loss: 0.00000006\n",
      "Epoch: 16490/20000, Loss: 0.00000006\n",
      "Epoch: 16500/20000, Loss: 0.00000006\n",
      "Epoch: 16510/20000, Loss: 0.00000006\n",
      "Epoch: 16520/20000, Loss: 0.00000006\n",
      "Epoch: 16530/20000, Loss: 0.00000007\n",
      "Epoch: 16540/20000, Loss: 0.00000012\n",
      "Epoch: 16550/20000, Loss: 0.00000007\n",
      "Epoch: 16560/20000, Loss: 0.00000006\n",
      "Epoch: 16570/20000, Loss: 0.00000006\n",
      "Epoch: 16580/20000, Loss: 0.00000008\n",
      "Epoch: 16590/20000, Loss: 0.00000009\n",
      "Epoch: 16600/20000, Loss: 0.00000007\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 16610/20000, Loss: 0.00000006\n",
      "Epoch: 16620/20000, Loss: 0.00000006\n",
      "Epoch: 16630/20000, Loss: 0.00000006\n",
      "Epoch: 16640/20000, Loss: 0.00000009\n",
      "Epoch: 16650/20000, Loss: 0.00000007\n",
      "Epoch: 16660/20000, Loss: 0.00000007\n",
      "Epoch: 16670/20000, Loss: 0.00000006\n",
      "Epoch: 16680/20000, Loss: 0.00000006\n",
      "Epoch: 16690/20000, Loss: 0.00000007\n",
      "Epoch: 16700/20000, Loss: 0.00000012\n",
      "Epoch: 16710/20000, Loss: 0.00000009\n",
      "Epoch: 16720/20000, Loss: 0.00000006\n",
      "Epoch: 16730/20000, Loss: 0.00000006\n",
      "Epoch: 16740/20000, Loss: 0.00000006\n",
      "Epoch: 16750/20000, Loss: 0.00000006\n",
      "Epoch: 16760/20000, Loss: 0.00000008\n",
      "Epoch: 16770/20000, Loss: 0.00000006\n",
      "Epoch: 16780/20000, Loss: 0.00000006\n",
      "Epoch: 16790/20000, Loss: 0.00000006\n",
      "Epoch: 16800/20000, Loss: 0.00000007\n",
      "Epoch: 16810/20000, Loss: 0.00000011\n",
      "Epoch: 16820/20000, Loss: 0.00000008\n",
      "Epoch: 16830/20000, Loss: 0.00000006\n",
      "Epoch: 16840/20000, Loss: 0.00000006\n",
      "Epoch: 16850/20000, Loss: 0.00000005\n",
      "Epoch: 16860/20000, Loss: 0.00000005\n",
      "Epoch: 16870/20000, Loss: 0.00000006\n",
      "Epoch: 16880/20000, Loss: 0.00000010\n",
      "Epoch: 16890/20000, Loss: 0.00000008\n",
      "Epoch: 16900/20000, Loss: 0.00000006\n",
      "Epoch: 16910/20000, Loss: 0.00000006\n",
      "Epoch: 16920/20000, Loss: 0.00000005\n",
      "Epoch: 16930/20000, Loss: 0.00000005\n",
      "Epoch: 16940/20000, Loss: 0.00000005\n",
      "Epoch: 16950/20000, Loss: 0.00000005\n",
      "Epoch: 16960/20000, Loss: 0.00000008\n",
      "Epoch: 16970/20000, Loss: 0.00000015\n",
      "Epoch: 16980/20000, Loss: 0.00000008\n",
      "Epoch: 16990/20000, Loss: 0.00000006\n",
      "Epoch: 17000/20000, Loss: 0.00000005\n",
      "Epoch: 17010/20000, Loss: 0.00000005\n",
      "Epoch: 17020/20000, Loss: 0.00000005\n",
      "Epoch: 17030/20000, Loss: 0.00000005\n",
      "Epoch: 17040/20000, Loss: 0.00000006\n",
      "Epoch: 17050/20000, Loss: 0.00000012\n",
      "Epoch: 17060/20000, Loss: 0.00000007\n",
      "Epoch: 17070/20000, Loss: 0.00000005\n",
      "Epoch: 17080/20000, Loss: 0.00000005\n",
      "Epoch: 17090/20000, Loss: 0.00000005\n",
      "Epoch: 17100/20000, Loss: 0.00000010\n",
      "Epoch: 17110/20000, Loss: 0.00000005\n",
      "Epoch: 17120/20000, Loss: 0.00000005\n",
      "Epoch: 17130/20000, Loss: 0.00000005\n",
      "Epoch: 17140/20000, Loss: 0.00000005\n",
      "Epoch: 17150/20000, Loss: 0.00000005\n",
      "Epoch: 17160/20000, Loss: 0.00000012\n",
      "Epoch: 17170/20000, Loss: 0.00000005\n",
      "Epoch: 17180/20000, Loss: 0.00000006\n",
      "Epoch: 17190/20000, Loss: 0.00000005\n",
      "Epoch: 17200/20000, Loss: 0.00000005\n",
      "Epoch: 17210/20000, Loss: 0.00000005\n",
      "Epoch: 17220/20000, Loss: 0.00000005\n",
      "Epoch: 17230/20000, Loss: 0.00000006\n",
      "Epoch: 17240/20000, Loss: 0.00000019\n",
      "Epoch: 17250/20000, Loss: 0.00000005\n",
      "Epoch: 17260/20000, Loss: 0.00000006\n",
      "Epoch: 17270/20000, Loss: 0.00000005\n",
      "Epoch: 17280/20000, Loss: 0.00000005\n",
      "Epoch: 17290/20000, Loss: 0.00000005\n",
      "Epoch: 17300/20000, Loss: 0.00000005\n",
      "Epoch: 17310/20000, Loss: 0.00000005\n",
      "Epoch: 17320/20000, Loss: 0.00000005\n",
      "Epoch: 17330/20000, Loss: 0.00000024\n",
      "Epoch: 17340/20000, Loss: 0.00000009\n",
      "Epoch: 17350/20000, Loss: 0.00000005\n",
      "Epoch: 17360/20000, Loss: 0.00000005\n",
      "Epoch: 17370/20000, Loss: 0.00000005\n",
      "Epoch: 17380/20000, Loss: 0.00000005\n",
      "Epoch: 17390/20000, Loss: 0.00000005\n",
      "Epoch: 17400/20000, Loss: 0.00000004\n",
      "Epoch: 17410/20000, Loss: 0.00000004\n",
      "Epoch: 17420/20000, Loss: 0.00000004\n",
      "Epoch: 17430/20000, Loss: 0.00000005\n",
      "Epoch: 17440/20000, Loss: 0.00000008\n",
      "Epoch: 17450/20000, Loss: 0.00000006\n",
      "Epoch: 17460/20000, Loss: 0.00000006\n",
      "Epoch: 17470/20000, Loss: 0.00000005\n",
      "Epoch: 17480/20000, Loss: 0.00000004\n",
      "Epoch: 17490/20000, Loss: 0.00000004\n",
      "Epoch: 17500/20000, Loss: 0.00000004\n",
      "Epoch: 17510/20000, Loss: 0.00000004\n",
      "Epoch: 17520/20000, Loss: 0.00000004\n",
      "Epoch: 17530/20000, Loss: 0.00000006\n",
      "Epoch: 17540/20000, Loss: 0.00000015\n",
      "Epoch: 17550/20000, Loss: 0.00000006\n",
      "Epoch: 17560/20000, Loss: 0.00000004\n",
      "Epoch: 17570/20000, Loss: 0.00000004\n",
      "Epoch: 17580/20000, Loss: 0.00000004\n",
      "Epoch: 17590/20000, Loss: 0.00000004\n",
      "Epoch: 17600/20000, Loss: 0.00000004\n",
      "Epoch: 17610/20000, Loss: 0.00000004\n",
      "Epoch: 17620/20000, Loss: 0.00000005\n",
      "Epoch: 17630/20000, Loss: 0.00000013\n",
      "Epoch: 17640/20000, Loss: 0.00000007\n",
      "Epoch: 17650/20000, Loss: 0.00000006\n",
      "Epoch: 17660/20000, Loss: 0.00000005\n",
      "Epoch: 17670/20000, Loss: 0.00000004\n",
      "Epoch: 17680/20000, Loss: 0.00000004\n",
      "Epoch: 17690/20000, Loss: 0.00000005\n",
      "Epoch: 17700/20000, Loss: 0.00000010\n",
      "Epoch: 17710/20000, Loss: 0.00000005\n",
      "Epoch: 17720/20000, Loss: 0.00000005\n",
      "Epoch: 17730/20000, Loss: 0.00000004\n",
      "Epoch: 17740/20000, Loss: 0.00000004\n",
      "Epoch: 17750/20000, Loss: 0.00000004\n",
      "Epoch: 17760/20000, Loss: 0.00000004\n",
      "Epoch: 17770/20000, Loss: 0.00000007\n",
      "Epoch: 17780/20000, Loss: 0.00000012\n",
      "Epoch: 17790/20000, Loss: 0.00000006\n",
      "Epoch: 17800/20000, Loss: 0.00000004\n",
      "Epoch: 17810/20000, Loss: 0.00000004\n",
      "Epoch: 17820/20000, Loss: 0.00000004\n",
      "Epoch: 17830/20000, Loss: 0.00000004\n",
      "Epoch: 17840/20000, Loss: 0.00000004\n",
      "Epoch: 17850/20000, Loss: 0.00000004\n",
      "Epoch: 17860/20000, Loss: 0.00000008\n",
      "Epoch: 17870/20000, Loss: 0.00000006\n",
      "Epoch: 17880/20000, Loss: 0.00000005\n",
      "Epoch: 17890/20000, Loss: 0.00000005\n",
      "Epoch: 17900/20000, Loss: 0.00000007\n",
      "Epoch: 17910/20000, Loss: 0.00000004\n",
      "Epoch: 17920/20000, Loss: 0.00000005\n",
      "Epoch: 17930/20000, Loss: 0.00000004\n",
      "Epoch: 17940/20000, Loss: 0.00000004\n",
      "Epoch: 17950/20000, Loss: 0.00000004\n",
      "Epoch: 17960/20000, Loss: 0.00000005\n",
      "Epoch: 17970/20000, Loss: 0.00000010\n",
      "Epoch: 17980/20000, Loss: 0.00000005\n",
      "Epoch: 17990/20000, Loss: 0.00000005\n",
      "Epoch: 18000/20000, Loss: 0.00000004\n",
      "Epoch: 18010/20000, Loss: 0.00000004\n",
      "Epoch: 18020/20000, Loss: 0.00000004\n",
      "Epoch: 18030/20000, Loss: 0.00000004\n",
      "Epoch: 18040/20000, Loss: 0.00000004\n",
      "Epoch: 18050/20000, Loss: 0.00000008\n",
      "Epoch: 18060/20000, Loss: 0.00000007\n",
      "Epoch: 18070/20000, Loss: 0.00000004\n",
      "Epoch: 18080/20000, Loss: 0.00000004\n",
      "Epoch: 18090/20000, Loss: 0.00000004\n",
      "Epoch: 18100/20000, Loss: 0.00000005\n",
      "Epoch: 18110/20000, Loss: 0.00000007\n",
      "Epoch: 18120/20000, Loss: 0.00000004\n",
      "Epoch: 18130/20000, Loss: 0.00000004\n",
      "Epoch: 18140/20000, Loss: 0.00000004\n",
      "Epoch: 18150/20000, Loss: 0.00000004\n",
      "Epoch: 18160/20000, Loss: 0.00000004\n",
      "Epoch: 18170/20000, Loss: 0.00000005\n",
      "Epoch: 18180/20000, Loss: 0.00000009\n",
      "Epoch: 18190/20000, Loss: 0.00000007\n",
      "Epoch: 18200/20000, Loss: 0.00000004\n",
      "Epoch: 18210/20000, Loss: 0.00000004\n",
      "Epoch: 18220/20000, Loss: 0.00000004\n",
      "Epoch: 18230/20000, Loss: 0.00000004\n",
      "Epoch: 18240/20000, Loss: 0.00000004\n",
      "Epoch: 18250/20000, Loss: 0.00000006\n",
      "Epoch: 18260/20000, Loss: 0.00000013\n",
      "Epoch: 18270/20000, Loss: 0.00000006\n",
      "Epoch: 18280/20000, Loss: 0.00000004\n",
      "Epoch: 18290/20000, Loss: 0.00000004\n",
      "Epoch: 18300/20000, Loss: 0.00000004\n",
      "Epoch: 18310/20000, Loss: 0.00000004\n",
      "Epoch: 18320/20000, Loss: 0.00000004\n",
      "Epoch: 18330/20000, Loss: 0.00000005\n",
      "Epoch: 18340/20000, Loss: 0.00000010\n",
      "Epoch: 18350/20000, Loss: 0.00000007\n",
      "Epoch: 18360/20000, Loss: 0.00000005\n",
      "Epoch: 18370/20000, Loss: 0.00000004\n",
      "Epoch: 18380/20000, Loss: 0.00000004\n",
      "Epoch: 18390/20000, Loss: 0.00000004\n",
      "Epoch: 18400/20000, Loss: 0.00000012\n",
      "Epoch: 18410/20000, Loss: 0.00000005\n",
      "Epoch: 18420/20000, Loss: 0.00000004\n",
      "Epoch: 18430/20000, Loss: 0.00000004\n",
      "Epoch: 18440/20000, Loss: 0.00000004\n",
      "Epoch: 18450/20000, Loss: 0.00000004\n",
      "Epoch: 18460/20000, Loss: 0.00000004\n",
      "Epoch: 18470/20000, Loss: 0.00000011\n",
      "Epoch: 18480/20000, Loss: 0.00000006\n",
      "Epoch: 18490/20000, Loss: 0.00000004\n",
      "Epoch: 18500/20000, Loss: 0.00000004\n",
      "Epoch: 18510/20000, Loss: 0.00000004\n",
      "Epoch: 18520/20000, Loss: 0.00000006\n",
      "Epoch: 18530/20000, Loss: 0.00000006\n",
      "Epoch: 18540/20000, Loss: 0.00000004\n",
      "Epoch: 18550/20000, Loss: 0.00000004\n",
      "Epoch: 18560/20000, Loss: 0.00000004\n",
      "Epoch: 18570/20000, Loss: 0.00000003\n",
      "Epoch: 18580/20000, Loss: 0.00000004\n",
      "Epoch: 18590/20000, Loss: 0.00000008\n",
      "Epoch: 18600/20000, Loss: 0.00000010\n",
      "Epoch: 18610/20000, Loss: 0.00000005\n",
      "Epoch: 18620/20000, Loss: 0.00000004\n",
      "Epoch: 18630/20000, Loss: 0.00000004\n",
      "Epoch: 18640/20000, Loss: 0.00000004\n",
      "Epoch: 18650/20000, Loss: 0.00000003\n",
      "Epoch: 18660/20000, Loss: 0.00000003\n",
      "Epoch: 18670/20000, Loss: 0.00000003\n",
      "Epoch: 18680/20000, Loss: 0.00000003\n",
      "Epoch: 18690/20000, Loss: 0.00000006\n",
      "Epoch: 18700/20000, Loss: 0.00000008\n",
      "Epoch: 18710/20000, Loss: 0.00000004\n",
      "Epoch: 18720/20000, Loss: 0.00000003\n",
      "Epoch: 18730/20000, Loss: 0.00000003\n",
      "Epoch: 18740/20000, Loss: 0.00000003\n",
      "Epoch: 18750/20000, Loss: 0.00000006\n",
      "Epoch: 18760/20000, Loss: 0.00000005\n",
      "Epoch: 18770/20000, Loss: 0.00000004\n",
      "Epoch: 18780/20000, Loss: 0.00000003\n",
      "Epoch: 18790/20000, Loss: 0.00000003\n",
      "Epoch: 18800/20000, Loss: 0.00000003\n",
      "Epoch: 18810/20000, Loss: 0.00000003\n",
      "Epoch: 18820/20000, Loss: 0.00000003\n",
      "Epoch: 18830/20000, Loss: 0.00000003\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 18840/20000, Loss: 0.00000003\n",
      "Epoch: 18850/20000, Loss: 0.00000009\n",
      "Epoch: 18860/20000, Loss: 0.00000008\n",
      "Epoch: 18870/20000, Loss: 0.00000006\n",
      "Epoch: 18880/20000, Loss: 0.00000006\n",
      "Epoch: 18890/20000, Loss: 0.00000004\n",
      "Epoch: 18900/20000, Loss: 0.00000003\n",
      "Epoch: 18910/20000, Loss: 0.00000003\n",
      "Epoch: 18920/20000, Loss: 0.00000003\n",
      "Epoch: 18930/20000, Loss: 0.00000004\n",
      "Epoch: 18940/20000, Loss: 0.00000009\n",
      "Epoch: 18950/20000, Loss: 0.00000003\n",
      "Epoch: 18960/20000, Loss: 0.00000003\n",
      "Epoch: 18970/20000, Loss: 0.00000003\n",
      "Epoch: 18980/20000, Loss: 0.00000003\n",
      "Epoch: 18990/20000, Loss: 0.00000003\n",
      "Epoch: 19000/20000, Loss: 0.00000003\n",
      "Epoch: 19010/20000, Loss: 0.00000003\n",
      "Epoch: 19020/20000, Loss: 0.00000003\n",
      "Epoch: 19030/20000, Loss: 0.00000003\n",
      "Epoch: 19040/20000, Loss: 0.00000005\n",
      "Epoch: 19050/20000, Loss: 0.00000011\n",
      "Epoch: 19060/20000, Loss: 0.00000005\n",
      "Epoch: 19070/20000, Loss: 0.00000004\n",
      "Epoch: 19080/20000, Loss: 0.00000003\n",
      "Epoch: 19090/20000, Loss: 0.00000003\n",
      "Epoch: 19100/20000, Loss: 0.00000003\n",
      "Epoch: 19110/20000, Loss: 0.00000004\n",
      "Epoch: 19120/20000, Loss: 0.00000009\n",
      "Epoch: 19130/20000, Loss: 0.00000004\n",
      "Epoch: 19140/20000, Loss: 0.00000003\n",
      "Epoch: 19150/20000, Loss: 0.00000003\n",
      "Epoch: 19160/20000, Loss: 0.00000003\n",
      "Epoch: 19170/20000, Loss: 0.00000003\n",
      "Epoch: 19180/20000, Loss: 0.00000004\n",
      "Epoch: 19190/20000, Loss: 0.00000014\n",
      "Epoch: 19200/20000, Loss: 0.00000007\n",
      "Epoch: 19210/20000, Loss: 0.00000005\n",
      "Epoch: 19220/20000, Loss: 0.00000003\n",
      "Epoch: 19230/20000, Loss: 0.00000003\n",
      "Epoch: 19240/20000, Loss: 0.00000003\n",
      "Epoch: 19250/20000, Loss: 0.00000003\n",
      "Epoch: 19260/20000, Loss: 0.00000006\n",
      "Epoch: 19270/20000, Loss: 0.00000005\n",
      "Epoch: 19280/20000, Loss: 0.00000004\n",
      "Epoch: 19290/20000, Loss: 0.00000003\n",
      "Epoch: 19300/20000, Loss: 0.00000003\n",
      "Epoch: 19310/20000, Loss: 0.00000003\n",
      "Epoch: 19320/20000, Loss: 0.00000003\n",
      "Epoch: 19330/20000, Loss: 0.00000008\n",
      "Epoch: 19340/20000, Loss: 0.00000007\n",
      "Epoch: 19350/20000, Loss: 0.00000003\n",
      "Epoch: 19360/20000, Loss: 0.00000004\n",
      "Epoch: 19370/20000, Loss: 0.00000003\n",
      "Epoch: 19380/20000, Loss: 0.00000003\n",
      "Epoch: 19390/20000, Loss: 0.00000003\n",
      "Epoch: 19400/20000, Loss: 0.00000003\n",
      "Epoch: 19410/20000, Loss: 0.00000004\n",
      "Epoch: 19420/20000, Loss: 0.00000012\n",
      "Epoch: 19430/20000, Loss: 0.00000006\n",
      "Epoch: 19440/20000, Loss: 0.00000004\n",
      "Epoch: 19450/20000, Loss: 0.00000003\n",
      "Epoch: 19460/20000, Loss: 0.00000003\n",
      "Epoch: 19470/20000, Loss: 0.00000003\n",
      "Epoch: 19480/20000, Loss: 0.00000003\n",
      "Epoch: 19490/20000, Loss: 0.00000004\n",
      "Epoch: 19500/20000, Loss: 0.00000012\n",
      "Epoch: 19510/20000, Loss: 0.00000005\n",
      "Epoch: 19520/20000, Loss: 0.00000003\n",
      "Epoch: 19530/20000, Loss: 0.00000003\n",
      "Epoch: 19540/20000, Loss: 0.00000003\n",
      "Epoch: 19550/20000, Loss: 0.00000006\n",
      "Epoch: 19560/20000, Loss: 0.00000004\n",
      "Epoch: 19570/20000, Loss: 0.00000004\n",
      "Epoch: 19580/20000, Loss: 0.00000003\n",
      "Epoch: 19590/20000, Loss: 0.00000003\n",
      "Epoch: 19600/20000, Loss: 0.00000003\n",
      "Epoch: 19610/20000, Loss: 0.00000003\n",
      "Epoch: 19620/20000, Loss: 0.00000003\n",
      "Epoch: 19630/20000, Loss: 0.00000007\n",
      "Epoch: 19640/20000, Loss: 0.00000011\n",
      "Epoch: 19650/20000, Loss: 0.00000004\n",
      "Epoch: 19660/20000, Loss: 0.00000003\n",
      "Epoch: 19670/20000, Loss: 0.00000003\n",
      "Epoch: 19680/20000, Loss: 0.00000003\n",
      "Epoch: 19690/20000, Loss: 0.00000003\n",
      "Epoch: 19700/20000, Loss: 0.00000003\n",
      "Epoch: 19710/20000, Loss: 0.00000003\n",
      "Epoch: 19720/20000, Loss: 0.00000003\n",
      "Epoch: 19730/20000, Loss: 0.00000009\n",
      "Epoch: 19740/20000, Loss: 0.00000003\n",
      "Epoch: 19750/20000, Loss: 0.00000003\n",
      "Epoch: 19760/20000, Loss: 0.00000003\n",
      "Epoch: 19770/20000, Loss: 0.00000004\n",
      "Epoch: 19780/20000, Loss: 0.00000011\n",
      "Epoch: 19790/20000, Loss: 0.00000005\n",
      "Epoch: 19800/20000, Loss: 0.00000004\n",
      "Epoch: 19810/20000, Loss: 0.00000003\n",
      "Epoch: 19820/20000, Loss: 0.00000003\n",
      "Epoch: 19830/20000, Loss: 0.00000003\n",
      "Epoch: 19840/20000, Loss: 0.00000003\n",
      "Epoch: 19850/20000, Loss: 0.00000003\n",
      "Epoch: 19860/20000, Loss: 0.00000009\n",
      "Epoch: 19870/20000, Loss: 0.00000006\n",
      "Epoch: 19880/20000, Loss: 0.00000004\n",
      "Epoch: 19890/20000, Loss: 0.00000004\n",
      "Epoch: 19900/20000, Loss: 0.00000003\n",
      "Epoch: 19910/20000, Loss: 0.00000003\n",
      "Epoch: 19920/20000, Loss: 0.00000003\n",
      "Epoch: 19930/20000, Loss: 0.00000005\n",
      "Epoch: 19940/20000, Loss: 0.00000008\n",
      "Epoch: 19950/20000, Loss: 0.00000005\n",
      "Epoch: 19960/20000, Loss: 0.00000003\n",
      "Epoch: 19970/20000, Loss: 0.00000003\n",
      "Epoch: 19980/20000, Loss: 0.00000003\n",
      "Epoch: 19990/20000, Loss: 0.00000003\n",
      "Epoch: 20000/20000, Loss: 0.00000003\n",
      "torch.Size([1, 256])\n",
      "torch.Size([256])\n"
     ]
    }
   ],
   "source": [
    "# Toy problem data\n",
    "input_size = 256\n",
    "hidden_size = 32\n",
    "output_size = 256\n",
    "sequence_length = 79\n",
    "batch_size = 1\n",
    "num_epochs = 20000\n",
    "\n",
    "\n",
    "# Set random seed for reproducibility\n",
    "#torch.manual_seed(42)\n",
    "\n",
    "\n",
    "\n",
    "input_data = u[:,0:79]\n",
    "target_data = u[:,1:80]\n",
    "\n",
    "test_data = u[:,79]\n",
    "#test_target = u[:,80:100]\n",
    "\n",
    "\n",
    "# Convert data to tensors\n",
    "input_tensor = torch.tensor(input_data.T).view(batch_size, sequence_length, input_size).float()\n",
    "target_tensor = torch.tensor(target_data.T).view(batch_size, sequence_length, output_size).float()\n",
    "\n",
    "# Convert test data to tensors\n",
    "test_tensor = torch.tensor(test_data.T).view(batch_size, 1, input_size).float()\n",
    "#test_target_tensor = torch.tensor(test_target.T).view(batch_size, 20, output_size).float()\n",
    "\n",
    "# Create coRNN instance\n",
    "cornn = coRNN(input_size, hidden_size, output_size, dt=0.1, gamma=1.0, epsilon=0.01)\n",
    "\n",
    "# Loss and optimizer\n",
    "criterion = nn.MSELoss()\n",
    "optimizer = torch.optim.Adam(cornn.parameters(), lr=0.001)\n",
    "\n",
    "# Training loop\n",
    "for epoch in range(num_epochs):\n",
    "    # Forward pass\n",
    "    output = cornn(input_tensor)\n",
    "    loss = criterion(output, target_tensor)\n",
    "\n",
    "    # Backward and optimize\n",
    "    optimizer.zero_grad()\n",
    "    loss.backward()\n",
    "    optimizer.step()\n",
    "\n",
    "    # Print progress\n",
    "    if (epoch+1) % 10 == 0:\n",
    "        print(f'Epoch: {epoch+1}/{num_epochs}, Loss: {loss.item():.8f}')\n",
    "\n",
    "\n",
    "with torch.no_grad():\n",
    "    prediction = cornn(test_tensor)\n",
    "\n",
    "print(prediction.shape)\n",
    "\n",
    "final_time_output = prediction[-1, :]\n",
    "print(final_time_output.shape)\n",
    "\n",
    "final_out = final_time_output.detach().numpy().reshape(-1,1)\n",
    "final_true = u[:,-1].reshape(-1,1)\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "4ac1a804",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([1, 1, 256])\n",
      "torch.Size([1, 20, 256])\n"
     ]
    }
   ],
   "source": [
    "print(test_tensor.shape)\n",
    "prediction_tensor = torch.zeros(1, 20, 256).float()\n",
    "print(prediction_tensor.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "e73b12e7",
   "metadata": {},
   "outputs": [],
   "source": [
    "with torch.no_grad():\n",
    "    prediction = cornn(test_tensor)\n",
    "    prediction = prediction.view(1, 1, 256).float()\n",
    "    prediction_tensor[:, 0, :] = prediction\n",
    "    for i in range(19):\n",
    "        prediction = cornn(prediction)\n",
    "        prediction = prediction.view(1, 1, 256).float()\n",
    "        prediction_tensor[:, i+1, :] = prediction"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "68cf2f04",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Exact Solution\n",
    "\n",
    "u_test = u_1.T\n",
    "u_test_full = u_test[80:100, :]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "cd70c84b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([1, 1, 256])"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "prediction.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "57a01be1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(20, 256)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "u_test_full.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "65936417",
   "metadata": {},
   "source": [
    "### L2 norm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "e92b5fe2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([20, 256])"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Extrapolation\n",
    "\n",
    "k1 = ( prediction_tensor - u_test_full)**2\n",
    "u_test_full_tensor = torch.tensor(u_test_full**2)\n",
    "u_test_full_tensor.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "9a5129a9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Relative Error Test:  0.004655814181469072 %\n"
     ]
    }
   ],
   "source": [
    "# Compute the relative L2 error norm (generalization error)\n",
    "relative_error_test = torch.mean(k1)/ torch.mean(u_test_full_tensor)\n",
    "\n",
    "print(\"Relative Error Test: \", relative_error_test.item(), \"%\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "1e969324",
   "metadata": {},
   "outputs": [
    {
     "ename": "SyntaxError",
     "evalue": "invalid syntax (4209523232.py, line 1)",
     "output_type": "error",
     "traceback": [
      "\u001b[0;36m  Input \u001b[0;32mIn [12]\u001b[0;36m\u001b[0m\n\u001b[0;31m    2+\u001b[0m\n\u001b[0m      ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n"
     ]
    }
   ],
   "source": [
    "2+"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "60c30f0c",
   "metadata": {},
   "source": [
    "### Max absolute error"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e5652aca",
   "metadata": {},
   "outputs": [],
   "source": [
    "R_abs = torch.max(torch.abs(prediction_tensor - u_test_full))\n",
    "print(R_abs)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f58215d9",
   "metadata": {},
   "source": [
    "### Explained variance score"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "744fa133",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "\n",
    "a = prediction_tensor\n",
    "b = u_test_full\n",
    "# Assuming 'a' is your predicted values (model's predictions) and 'b' is the true values (ground truth)\n",
    "# Make sure 'a' and 'b' are PyTorch tensors\n",
    "a = torch.tensor(a)\n",
    "b = torch.tensor(b)\n",
    "# Calculate the mean of 'b'\n",
    "mean_b = torch.mean(b)\n",
    "\n",
    "# Calculate the Explained Variance Score\n",
    "numerator = torch.var(b - a)  # Variance of the differences between 'b' and 'a'\n",
    "denominator = torch.var(b)    # Variance of 'b'\n",
    "evs = 1 - numerator / denominator\n",
    "\n",
    "print(\"Explained Variance Score:\", evs.item())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ed83c989",
   "metadata": {},
   "source": [
    "### Mean absolute error"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8e3cf699",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Compute the relative L2 error norm (generalization error)\n",
    "relative_error_test = torch.mean(torch.abs(prediction_tensor - u_test_full))\n",
    "\n",
    "print(\"Relative Error Test: \", relative_error_test, \"%\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "05bca726",
   "metadata": {},
   "outputs": [],
   "source": [
    "print(prediction_tensor.shape)\n",
    "prediction_tensor = torch.squeeze(prediction_tensor)\n",
    "prediction_tensor.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8d74b054",
   "metadata": {},
   "source": [
    "### Ploting at snapshot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "df4a0a6e",
   "metadata": {},
   "outputs": [],
   "source": [
    "plt.rcParams['figure.figsize'] = [10, 4]\n",
    "\n",
    "from matplotlib.font_manager import FontProperties\n",
    "plt.rcParams['axes.unicode_minus'] = False\n",
    "font_path = 'times-new-roman.ttf'\n",
    "custom_font = FontProperties(fname=font_path)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "aaedd699",
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import torch\n",
    "\n",
    "# Create the figure and axis objects with reduced width\n",
    "fig, ax = plt.subplots(figsize=(5, 5))  # You can adjust the width (7 inches) and height (5 inches) as needed\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "final_time_output = prediction_tensor[3, :]\n",
    "final_out = final_time_output.detach().numpy().reshape(-1, 1)\n",
    "final_true = u_1[:, 83].reshape(-1, 1)\n",
    "\n",
    "# Plot the data with red and blue lines, one with dotted and one with solid style\n",
    "ax.plot(x, final_out, color='red', linestyle='dotted', linewidth=12, label='Prediction')\n",
    "ax.plot(x, final_true, color='blue', linestyle='solid', linewidth=7, label='True')\n",
    "\n",
    "\n",
    "# Set the axis labels with bold font weight\n",
    "ax.set_xlabel(r\"${x}$\", fontsize=26, color='black', fontdict={'weight': 'bold'})\n",
    "ax.set_ylabel(r\"${u(x, t)}$\", fontsize=26, color='black', fontdict={'weight': 'bold'})\n",
    "\n",
    "# Set the title with bold font weight\n",
    "ax.set_title(r\"${t = 0.83}$\", fontsize=26, color='black', fontweight='bold')\n",
    "\n",
    "# Set the number of ticks for x-axis and y-axis to 3\n",
    "ax.set_xticks([-1, 0, 1])\n",
    "ax.set_yticks([-1, 0, 1])\n",
    "\n",
    "# Set tick labels fontweight to bold and increase font size\n",
    "ax.tick_params(axis='both', which='major', labelsize=20, width=2, length=10)\n",
    "\n",
    "# # Set the fontweight for tick labels to bold\n",
    "# for tick in ax.get_xticklabels() + ax.get_yticklabels():\n",
    "#     tick.set_weight('bold')\n",
    "\n",
    "# Set the spines linewidth to bold\n",
    "ax.spines['top'].set_linewidth(2)\n",
    "ax.spines['right'].set_linewidth(2)\n",
    "ax.spines['bottom'].set_linewidth(2)\n",
    "ax.spines['left'].set_linewidth(2)\n",
    "\n",
    "# Set the legend\n",
    "# ax.legend()\n",
    "\n",
    "plt.savefig('coRNN_0.83_20.pdf', dpi=500, bbox_inches=\"tight\")\n",
    "#plt.savefig('lem_0.83_20.png', dpi=500, bbox_inches=\"tight\")\n",
    "# Show the plot\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "68dfda35",
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import torch\n",
    "\n",
    "# Create the figure and axis objects with reduced width\n",
    "fig, ax = plt.subplots(figsize=(5, 5))  # You can adjust the width (7 inches) and height (5 inches) as needed\n",
    "\n",
    "\n",
    "\n",
    "final_time_output = prediction_tensor[-2, :]\n",
    "final_out = final_time_output.detach().numpy().reshape(-1, 1)\n",
    "final_true = u_1[:, -2].reshape(-1, 1)\n",
    "\n",
    "# Plot the data with red and blue lines, one with dotted and one with solid style\n",
    "ax.plot(x, final_out, color='red', linestyle='dotted', linewidth=12, label='Prediction')\n",
    "ax.plot(x, final_true, color='blue', linestyle='solid', linewidth=7, label='True')\n",
    "\n",
    "\n",
    "# Set the axis labels with bold font weight\n",
    "ax.set_xlabel(r\"${x}$\", fontsize=26, color='black', fontdict={'weight': 'bold'})\n",
    "ax.set_ylabel(r\"${u(x, t)}$\", fontsize=26, color='black', fontdict={'weight': 'bold'})\n",
    "\n",
    "# Set the title with bold font weight\n",
    "ax.set_title(r\"${t = 0.98}$\", fontsize=26, color='black', fontweight='bold')\n",
    "\n",
    "# Set the number of ticks for x-axis and y-axis to 3\n",
    "ax.set_xticks([-1, 0, 1])\n",
    "ax.set_yticks([-1, 0, 1])\n",
    "\n",
    "# Set tick labels fontweight to bold and increase font size\n",
    "ax.tick_params(axis='both', which='major', labelsize=20, width=2, length=10)\n",
    "\n",
    "# # Set the fontweight for tick labels to bold\n",
    "# for tick in ax.get_xticklabels() + ax.get_yticklabels():\n",
    "#     tick.set_weight('bold')\n",
    "\n",
    "# Set the spines linewidth to bold\n",
    "ax.spines['top'].set_linewidth(2)\n",
    "ax.spines['right'].set_linewidth(2)\n",
    "ax.spines['bottom'].set_linewidth(2)\n",
    "ax.spines['left'].set_linewidth(2)\n",
    "\n",
    "# Set the legend\n",
    "# ax.legend()\n",
    "\n",
    "plt.savefig('coRNN_0.98_20.pdf', dpi=500, bbox_inches=\"tight\")\n",
    "#plt.savefig('lem_0.98_20.png', dpi=500, bbox_inches=\"tight\")\n",
    "# Show the plot\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "03b9675c",
   "metadata": {},
   "source": [
    "### contour plot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2cd3dc82",
   "metadata": {},
   "outputs": [],
   "source": [
    "print(input_tensor.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4ca1486a",
   "metadata": {},
   "outputs": [],
   "source": [
    "print(prediction_tensor.shape)\n",
    "prediction_tensor = torch.squeeze(prediction_tensor)\n",
    "input_tensor = torch.squeeze(input_tensor)\n",
    "\n",
    "conc_u = torch.squeeze(input_tensor)\n",
    "concatenated_tensor = torch.cat((conc_u, prediction_tensor), dim=0)\n",
    "\n",
    "x1 = np.linspace(-1, 1, 256)\n",
    "t1 = np.linspace(0, 1, 99)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "318c8974",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib.ticker import FixedLocator\n",
    "\n",
    "# Assuming you have defined concatenated_tensor as a PyTorch tensor\n",
    "# concatenated_tensor = torch.cat((tensor1, tensor2), dim=0)\n",
    "\n",
    "# Convert concatenated_tensor to a NumPy array\n",
    "concatenated_array = concatenated_tensor.numpy()\n",
    "\n",
    "# Define custom color levels\n",
    "x = np.linspace(-1, 1, concatenated_array.shape[1])  # Replace 0 and 1 with your actual x range\n",
    "t = np.linspace(0, 1, concatenated_array.shape[0])  # Replace 0 and 1 with your actual t range\n",
    "X, T = np.meshgrid(x, t1)\n",
    "\n",
    "# Define custom color levels using the minimum and maximum from the NumPy array\n",
    "c_levels = np.linspace(np.min(concatenated_array), np.max(concatenated_array), 400)\n",
    "\n",
    "# Plot the contour with interpolated data\n",
    "plt.figure(figsize=(20, 5))\n",
    "plt.pcolormesh(T, X, concatenated_array, shading='auto', cmap='coolwarm')\n",
    "\n",
    "# Set the fontweight for axis labels to regular (not bold)\n",
    "plt.xlabel(\"$t$\", fontsize=26)\n",
    "plt.ylabel(\"$x$\", fontsize=26)\n",
    "plt.title(\"$u(x, t)$\", fontsize=26)\n",
    "\n",
    "# Set tick labels fontweight to regular (not bold) and increase font size\n",
    "plt.tick_params(axis='both', which='major', labelsize=20, width=3, length=10)\n",
    "\n",
    "# Set the fontweight for tick labels to regular (not bold)\n",
    "for tick in plt.gca().get_xticklabels() + plt.gca().get_yticklabels():\n",
    "    tick.set_weight('normal')\n",
    "\n",
    "# Set the number of ticks for x-axis and y-axis to 5\n",
    "num_ticks = 5\n",
    "x_ticks = np.linspace(np.min(T), np.max(T), num_ticks)\n",
    "y_ticks = np.linspace(np.min(X), np.max(X), num_ticks)\n",
    "\n",
    "plt.gca().xaxis.set_major_locator(FixedLocator(x_ticks))\n",
    "plt.gca().yaxis.set_major_locator(FixedLocator(y_ticks))\n",
    "\n",
    "cbar1 = plt.colorbar()\n",
    "# Set the number of ticks for the color bar with uniformly distributed numbers\n",
    "num_ticks = 5\n",
    "c_ticks = np.linspace(np.min(concatenated_array), np.max(concatenated_array), num_ticks)\n",
    "cbar1.set_ticks(c_ticks)\n",
    "\n",
    "# Set the fontweight and fontsize for color bar tick labels\n",
    "for t in cbar1.ax.get_yticklabels():\n",
    "    t.set_weight('normal')\n",
    "    t.set_fontsize(26)  # Increase the font size for color bar tick labels\n",
    "\n",
    "# Increase the size of numbers on axis and color bar\n",
    "plt.xticks(fontsize=26)\n",
    "plt.yticks(fontsize=26)\n",
    "\n",
    "# Increase the tick size and width of the color bar\n",
    "cbar1.ax.tick_params(axis='both', which='major', labelsize=30, width=3,  length=10)\n",
    "\n",
    "# Add a dotted line at t = 0.8\n",
    "plt.axvline(x=0.8, color='black', linestyle='dotted', linewidth=5)\n",
    "\n",
    "#plt.savefig('Contour_LEM_20.pdf', dpi=500, bbox_inches=\"tight\")\n",
    "plt.savefig('contour_coRNN_20.jpeg', dpi=500, bbox_inches=\"tight\")\n",
    "# Show the plot\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c4df6dea",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "pytorch",
   "language": "python",
   "name": "pytorch"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
